WCF basicHttpBinding和HTTP代理

时间:2015-12-11 15:05:46

标签: c# wcf proxy http-proxy

我正在尝试让我生成的WCF ServiceClient通过带有用户名/密码身份验证的 HTTP (非HTTP S )代理将其请求发送到WCF服务,但是我无法让它发挥作用。我的WCF服务使用basicHttpBinding,所以我尝试配置我的ServiceClient实例,如下所示:

var svc = new ServiceClient();
var b = svc.Endpoint.Binding as BasicHttpBinding;

b.ProxyAddress = new Uri(proxyAddress);
b.UseDefaultWebProxy = false;
b.Security.Mode = BasicHttpSecurityMode.Transport;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
b.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;

svc.ClientCredentials.UserName.UserName = proxyUsername;
svc.ClientCredentials.UserName.Password = proxyPassword;

然而,这导致System.ArgumentException说:

  

提供的URI方案http无效。预期的https

当我将b.Security.Mode设置为BasicHttpSecurityMode.None时,似乎WCF完全忽略了HTTP代理设置!

我尝试的第二个解决方案是设置WebRequest的DefaultWebProxy属性并将UseDefaultWebProxy属性设置为true,如下所示:

var webProxy = new WebProxy(proxyAddress, true);
webProxy.Credentials = new NetworkCredential(proxyUsername, proxyPassword);
WebRequest.DefaultWebProxy = webProxy;

var svc = new ServiceClient();

var b = svc.Endpoint.Binding as BasicHttpBinding;
b.UseDefaultWebProxy = true;

但是这也不起作用,ServiceClient不会通过HTTP代理发送请求。

我在这里没有想法,所以请让我知道我做错了什么,谢谢!

1 个答案:

答案 0 :(得分:0)

将安全模式设置为BasicHttpSecurityMode.TransportCredentialOnly。这允许通过HTTP传递纯文本身份验证详细信息。