我编写了一个类,负责调用第三方WCF服务,并且该类工作正常。可以使用本地网络的代理设置来配置我们的应用程序,因此剩下的就是在拨打电话时使用那些设置(如果已设置)。

我环顾四周,看不到任何清楚说明如何执行此操作的内容。我发现我正在使用的BasicHttpBinding对象具有ProxyAddress属性,但是没有让我定义网络凭据或用户名和密码的东西。

它可能就在我眼前,所以我认为我只需要指向正确的方向。至少我希望它就是这么简单!我需要做的就是告诉我的服务呼叫什么是本地代理服务器以及要使用的凭据。

这是我实例化服务类的代码。我省略了下一部分,该部分构建请求类,调用服务方法并处理结果。

// Create the service instance.
var binding = new BasicHttpBinding();
var endPoint = new EndpointAddress(new Uri(_servicesBaseUri + "MyServiceName"));
var service = new WSHsgCreateSchemeRepairClient(binding, endPoint);

// Add the MessageInspector to the contract behaviours list. This will inject the SecurityHeader XML and the SOAP action.
var soapAction = _servicesBaseUri + "MyServiceName/MyServiceMethod";
service.Endpoint.Contract.Behaviors.Add(new MessageInspector(_securityHeaderUsername, _securityHeaderPassword, soapAction));


我们还有其他一些Web服务调用(使用旧的Web服务方法),它们生成System.Net.WebProxy的新实例并针对服务类Proxy属性进行设置,但显然在WCF中是不同的。

谢谢。

最佳答案

我想我已经解决了。可以设置和使用默认系统代理。 This is a very useful article如果其他任何人都违反相同的要求。

这个想法是,您必须首先设置System.Net.HttpWebRequest.DefaultWebProxy.Credentials(大概是System.Net.CredentialCache.DefaultCredentials)-这是将绑定的UseDefaultWebProxy设置为true时从“默认代理”参数获取的位置。

07-28 01:38
查看更多