我需要使用来自类项目的双向SSL对外部第三方进行WCF服务调用。我已将第三方提供的WSDL作为服务引用添加到我的项目中。问题是我们域外的所有呼叫(* .abc.com)都通过代理服务器
http://ironport:8080
这就是我在代码中所做的 -
var binding = new WSHttpBinding();
binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
binding.BypassProxyOnLocal = false;
binding.UseDefaultWebProxy = true;
binding.AllowCookies = false;
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
var endpoint = new EndpointAddress("https://blablabla.com/GetData.svc");
var client = new AccountClient(binding, endpoint);
X509Certificate2 certi = new X509Certificate2(@"path to pfx file", "password");
client.ClientCredentials.ClientCertificate.Certificate = certi;
我使用 -
进行服务调用var account = client.ExportAccounts(obj1, obj2, obj3);
然后它给我一个错误 -
The remote server returned an Error (407): Proxy authentication required
这很明显,因为我没有提到请求需要经历的代理详细信息。我需要的是一种方法,将以下信息从不同项目的web.config文件添加到我上面的请求中 -
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy proxyaddress="http://ironport:8080" />
<bypasslist>
<add address="[\w]+\.abc\.com$" />
</bypasslist>
</defaultProxy>
</system.net>
有没有办法在代码中实现这一点?或者我是否需要以完全不同的方式解决这个问题?如果我需要发布更多信息,请告诉我。
答案 0 :(得分:1)
您可以尝试使用WebProxy Class。没有经过测试,但是这样的事情:
WebProxy proxy = new WebProxy("http://ironport:8080");
proxy.BypassList = new string[] { "[\w]+\.abc\.com$" };
另一种方法是将配置的相关部分移动到使用您的类库的应用程序的web / app.config。
<强> ADDED 强>
不是100%确定这会有效,但您可以尝试将此行添加到您的代码中:
WebRequest.DefaultProxy = proxy;
取自answer
另一种选择可能是使用ProxyAddress
的{{1}}属性(确保在这种情况下将WsHttpBinding
设置为false),但我看不到添加方法这个旁路列表。