WCF basicHttpBinding 和 HTTP 代理

WCF basicHttpBinding and HTTP proxy

我试图让我生成的 WCF ServiceClient 通过 HTTP(不是 HTTPS 将其请求发送到 WCF 服务) 使用 username/password 身份验证进行代理,但是我无法让它工作。我的 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 说法:

The provided URI scheme http is invalid. expected 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 代理发送它的请求。

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

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