从网络驱动器运行.NET Remoting程序触发SocketException 11003求助
解决Windows 10 1803下网络驱动器运行.NET Remoting程序的SocketException 11003问题
这个坑我之前踩过!你遇到的SocketException 11003错误提示虽然提到了“数据库查找”,但其实和数据库完全无关——核心是Windows 10 1803版本对网络路径上运行的程序施加了更严格的安全限制,导致.NET Remoting底层的DNS解析环节失败了。
为什么会出现这个问题?
当程序从本地驱动器运行时,系统默认授予它完全的信任权限,DNS解析可以正常进行;但把EXE放到网络驱动器后,Windows会把它归为“非本地可信程序”,限制了它的网络操作权限,连基本的机器名DNS查找都被拦截,就抛出了这个误导性的错误。
可行的解决方案
我整理了几个亲测有效的解决办法,按从易到难排序:
直接改用服务器IP地址(最快临时解决)
绕过DNS解析环节,把代码里的serverMachineName替换成服务器的实际IP地址,这样就不会触发查找失败的问题:string uri = "tcp://192.168.1.100:" + port.ToString() + "/License"; // 替换为你的服务器IP ServerObject remoteObj = (ServerObject)Activator.GetObject(typeof(ServerObject), uri); Console.WriteLine("Test method result = " + remoteObj.Test());添加网络路径到本地Intranet安全区域
让Windows把你的网络驱动器识别为可信区域,解除权限限制:- 打开「控制面板」→「网络和Internet」→「Internet选项」→「安全」标签
- 选中「本地Intranet」,点击「站点」→「高级」
- 输入网络驱动器对应的共享路径(比如
\\your-server\share-folder),点击「添加」后确定 - 返回安全设置页面,点击「自定义级别」,找到.NET相关的权限项,将「对来自Intranet的.NET程序授予完全信任」设置为「启用」
添加程序配置文件授予远程加载信任
在你的EXE文件同目录下创建一个和EXE同名的配置文件(比如YourApp.exe.config),写入以下内容,让.NET框架明确信任从网络加载的程序集:<?xml version="1.0" encoding="utf-8"?> <configuration> <runtime> <loadFromRemoteSources enabled="true"/> </runtime> </configuration>检查网络驱动器的映射权限
确保你映射网络驱动器时使用的是域账号或本地管理员账号,普通受限用户可能会因为权限不足,导致底层Socket操作被系统拦截。
内容的提问来源于stack exchange,提问作者Miguel Ángel Bueno
相关产品推荐
相关产品推荐

