我正在尝试让我生成的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代理发送请求。
我在这里没有想法,所以请让我知道我做错了什么,谢谢!
答案 0 :(得分:0)
将安全模式设置为BasicHttpSecurityMode.TransportCredentialOnly。这允许通过HTTP传递纯文本身份验证详细信息。