我正在使用 WCF 的 netTcpBinding,它直接连接到一个端点,并且似乎对 socks 代理一无所知。
我需要使用代理,因为我的大多数客户端都不允许直接出站连接,并且始终强制使用 socks 代理。
我的第一个想法是配置 .net 框架来做到这一点,所以我编辑了 machine.config 文件如下,但它似乎只适用于 http 代理(不是袜子)
<system.net> <defaultProxy enabled="true"> <proxy usesystemdefault="False" proxyaddress="foo:1080" bypassonlocal="True"/> <module /> </defaultProxy> </system.net>
我的第二个选择是实现从 netTcpBinding 继承的自定义绑定,并且仅覆盖连接逻辑以添加代理代码。
我已经分解了 System.ServiceModel 程序集,不幸的是,很多类都标记为内部类(包括 SocketConnectionInitiator、ConnectionPoolHelper、ClientFramingDuplexSessionChannel 和 FramingDuplexSessionChannel,可能还有其他类)
这使得创建自定义 netTcpBinding 成为一项巨大的工作,而且在交付新版本的 .net 框架时可能会导致一些问题。
另一个想法是将一些代码直接注入到 Socket.Connect() 方法中。这很容易实现,但我对修改.net框架的内部代码不是很有信心。此外,虽然套接字类没有标记为密封,但我害怕破坏某些东西,尤其是在框架的后期版本中。
我现在的最后一个想法:我可以创建一个小代理工具,与我的软件在同一台计算机上运行,它会自动连接到公司的 socks 代理,并向真正的 socks 代理发出良好的“连接服务器”命令.
我认为后一种选择更好,但我很想听听其他人的意见。
你怎么看?