如何在 WCF 客户端上以编程方式设置 HTTP 代理,而不使用默认代理?
代理,代理,代理。
根据 WCF 开发模型,我通过在服务的 WSDL 上运行 svcutil.exe 来生成客户端“代理”类。(这也会产生一个客户端配置文件)。
在我的代码中,我新建了该类的一个实例,并且可以连接到该服务。非常好。
var svcProxy = new MyWebService();
svcProxy.GetInformation(request);
我们称这个东西为代理类,但还有另一个代理——http代理。该服务使用 wsHttpBinding basicHttpBinding,所以它通过 http。现在,假设我想通过 http 代理(由 .NET BCL 中的 System.Net.WebProxy 建模)将客户端连接到 Web 服务。我从阅读 .NET 和 WCF 文档的广泛而愉快的经历中知道,如果没有另外说明,WCF 运行时将在通过 http/https 通信时使用默认系统代理。
我可以在 WinXP/2003 的命令行中使用 ProxyCfg.exe 进行设置,如此处所述,在更高版本的 Windows中使用 netsh.exe 进行设置,如此处所述。
我还可以通过设置System.Net.WebRequest.DefaultWebProxy 属性来指定在应用程序中使用的默认 Web 代理。
但是假设我想通过不同于系统范围代理的代理进行连接?例如,也许没有系统范围的代理,但我需要特别为 Web 服务使用一个。或者也许有一个系统范围的代理,但我需要为 Web 服务使用不同的代理。事实上,也许有多个 Web 服务客户端,每个客户端都应该有一个不同的代理。
如何按绑定设置代理?
在 ASMX 模型中,我可以这样做:
var svcProxy = new MyWebService();
svcProxy.Proxy = new System.Net.WebProxy("http://proxyserver:1234", true);
svcProxy.GetInformation(request);
但这对于 WCF 是不可能的;WCF 生成的客户端代理类不公开 Proxy 属性。如何为每个客户端代理设置 http 代理,以及如何在 http 代理上设置身份验证?
相关:
-how -to-set-proxy-with-credentials-to-generated-wcf-client