我有一个小实用程序,它是一个SOAP WebService客户端。 SOAP代理是从WSDL生成的。它工作正常。
现在客户想要使用SQUID代理,但拒绝验证我的SOAP客户端。
我已经尝试过了:
MyWebservice ws = new MyWebservice();
// set URL etc.
// login for the actual service, this part works
HeaderLogin hl = new HeaderLogin();
hl.username = svcLogin;
hl.password = svcPassword;
ws.HeaderLoginValue = hl;
// setting up the Proxy of the Proxy
//ws.Proxy = System.Net.WebRequest.GetSystemWebProxy();
ws.Proxy = System.Net.WebRequest.DefaultWebProxy;
//ws.Proxy.Credentials = CredentialCache.DefaultCredentials;
ws.Proxy.Credentials = new NetworkCredential(proxyUser, proxyPassword, proxyDomain);
但我一直收到HTTP 407错误:需要代理身份验证。
SQUID(squid / 2.7.STABLE4)设置为使用NTLM和AD进行身份验证。这似乎工作正常:还有其他WebService客户端正在通过代理确定。
我无法直接访问该网站,只能查看一些日志文件。最值得注意的是我在PCAP(Wireshark)文件中看到的内容。当我使用userName =“Henk”创建NetworkCredential时,domain =“TEST”它在PCAP中显示为
... HTTP CONNECT someurl:443 HTTP / 1.1,NTLMSSP_AUTH,User:T \ H
当我查看PCAP的工作服务时
... HTTP CONNECT someurl:443 HTTP / 1.0,NTLMSSP_AUTH,User:TEST \ Henk
在SQUID acces.log中,所有尝试都显示为:
... 0 192.168.15.95 TCP_DENIED / 407 1759 CONNECT someurl:443 - NONE / - text / html
... 32 192.168.15.95 TCP_DENIED / 407 2055 CONNECT someurl:443 - NONE / - text / html
... 31 192.168.15.95 TCP_DENIED / 407 1759 CONNURE someurl:443 - NONE / - text / html
具体问题:
答案 0 :(得分:4)
在连接完成之前,可能会回收NTLM连接,从而导致新的/第二个匿名连接请求和407错误。
尝试重写GetWebRequest(Uri uri)方法并将KeepAlive属性设置为false。
使用以下内容编辑Reference.cs文件:
protected override WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
webRequest.KeepAlive = false;
return webRequest;
}
请记住,更新Web引用将导致Visual Studio重新生成文件,您需要再次修改该文件。
答案 1 :(得分:2)
T \ H可能表示您将Unicode字符串用作ASCII字符串。由于Unicode字符是两个字节(Windows上最常见的情况),如果将它们解释为ASCII,则会获得真实字符和空终止符字节。
我不希望在.NET应用程序中看到这种类型的错误,但你永远不会知道。
答案 2 :(得分:0)
我看到squid日志显示访问被拒绝 someurl:443 ...端口443是一个安全通道端口(SSL)。通常,SSL上托管的Web服务需要某种身份验证。请检查Web服务凭证要求。您可能必须通过凭证传递凭据或通过证书将自己作为有效客户端进行身份验证。
答案 3 :(得分:0)
你可以尝试在squid配置中为域添加“http_access allow”