System.Net.WebProxy.dll 核心功能与缺失影响
System.Net.WebProxy.dll 是 .NET 应用程序中承载 System.Net.WebProxy 类型及其代理配置能力的程序集。它围绕 IWebProxy 接口工作,为 WebRequest、HttpWebRequest、WebClient、HttpClient 等网络组件提供统一的代理决策入口。其核心不是发起 TCP 连接,而是决定请求是否经过代理、经过哪个代理、是否携带凭据,以及哪些目标地址应绕过代理。
一、核心功能
- 代理地址建模:通过 Address 属性保存 Uri 形式的代理服务器地址,支持 HTTP、HTTPS 等代理端点。
- 绕过策略:BypassProxyOnLocal 控制本地地址是否绕过代理;BypassList 以正则字符串集合描述直连目标。
- 凭据传递:Credentials 属性返回 ICredentials,用于代理认证,支持 NetworkCredential、CredentialCache 等。
- 代理选择:GetProxy 根据目标 Uri 返回实际代理 Uri;IsBypassed 判断某目标是否绕过代理。
- 默认代理兼容:GetDefaultProxy 读取系统或 IE 代理配置,兼容旧版默认代理行为。
- 自动发现与脚本:在 .NET Framework 中可结合 WPAD、PAC 脚本等机制,通过配置或系统设置解析代理。
- 程序集转发与兼容:在 .NET Core 与 .NET 5+ 中,部分类型通过兼容程序集或 NuGet 提供,保证旧代码迁移。
二、典型调用链
应用通过 WebRequest.DefaultWebProxy 获取全局代理,或 new WebProxy(address, bypassOnLocal, bypassList) 显式创建代理,然后赋值给 HttpWebRequest.Proxy、WebClient.Proxy、HttpClientHandler.Proxy。运行时,网络栈调用 IWebProxy.GetProxy 与 IsBypassed,完成路由判断。若使用默认代理,还可能触发系统代理设置读取。
三、缺少 DLL 的可能影响
- 加载期异常:FileNotFoundException、FileLoadException,提示无法加载 System.Net.WebProxy 程序集或某个依赖项。
- 类型解析失败:TypeLoadException、MissingMethodException,尤其在反射、序列化、依赖注入扫描、编译期引用类型时。
- 代理配置失效:WebProxy 类型无法实例化,WebRequest.DefaultWebProxy 不可用,HttpClientHandler.Proxy 赋值失败。
- 网络行为异常:请求可能直连,遇到内网出口限制、防火墙拦截或外网不可达;需要代理认证的环境出现 407。
- 自动发现与 PAC 失效:依赖系统代理、WPAD、PAC 的应用无法获得正确代理,批量网络任务失败。
- 部署与兼容问题:目标机 .NET Framework 版本不匹配、发布目录缺少程序集、GAC 未注册、NuGet 包未还原、单文件发布裁剪过度。
- 宿主崩溃:ASP.NET、WPF、WinForms、Windows 服务、计划任务在启动或首次网络调用时抛出异常并终止。
四、排查与修复
确认项目目标框架与程序集版本;检查 bin、发布目录、GAC 是否存在 System.Net.WebProxy.dll;核对 app.config 或 web.config 的 bindingRedirect;执行 dotnet restore 或 NuGet 安装;避免 IL Linker 与单文件裁剪误删;在目标机安装对应 .NET Framework 或 .NET 运行时;必要时将程序集复制到应用目录并注册。使用 Fuslogvw、Process Monitor、事件查看器定位加载失败。