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 传递纯文本身份验证详细信息。
我试图让我生成的 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 传递纯文本身份验证详细信息。