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