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