WCF basicHttpBinding and HTTP proxy

本文关键字:proxy HTTP and basicHttpBinding WCF | 更新日期: 2023-09-27 18:26:23

我正试图让我生成的WCF ServiceClient通过具有用户名/密码身份验证的HTTP(而不是HTTPS)代理将其请求发送到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代理发送请求。

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

WCF basicHttpBinding and HTTP proxy

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