在 .NET Framework 中加载自定义代理模块
当 defaultProxy 模块似乎没有效果时,检查类型加载、可执行文件配置和请求替代。
对于 .NET Framework 应用程序,请在 configuration/system.net/defaultProxy 下注册代理模块:
<defaultProxy>
<module type="Company.Network.RoutingProxy, Company.Network" />
</defaultProxy>第一个名称是类型,第二个是其程序集标识,而不是 DLL 路径。程序集和依赖项必须按照应用程序的常规规则加载。
检查两道关卡。首先,运行时必须通过无参数构造函数构造实现 IWebProxy 的公共类型。保留加载或构造失败产生的内部异常;它们先于任何代理 TCP 连接。对于桌面版发布,请确认注册已到达可执行文件的部署配置。使用 ClickOnce 时,比较已生成、已发布和已安装的 .exe.config。类库的 App.config 通常不会配置其宿主进程。
其次,请求必须使用该默认值。显式的代理分配可以取代它,而另一个 HTTP 堆栈可能不会读取此配置模型。在模块内部,GetProxy 和 IsBypassed 需要做出一致的决定,并使用具有正确方案和端口的绝对代理 URI。
还要让凭据行为保持一致。一个设置器被忽略、只生成硬编码账户的 getter,即使加载成功,也可能破坏后续配置。
这是 .NET Framework 的维护机制。在当前 .NET 中,请使用网络客户端支持的代理配置,而不要指望这个旧式 system.net 注册能够控制每个 HttpClient。