我有一个小实用程序,它是 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"、domain="TEST"创建 NetworkCredential 时,它在 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 CONNECT someurl:443 - NONE/- text/html
具体问题:
- .NET2 SOAP 和 Squid 有任何已知问题吗?
- TEST\Henk 显示为 T\H 有意义吗?
- 我还需要寻找什么吗?
最佳答案
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 重新生成文件,并且您需要再次修改该文件。
关于c# - 如何使用 SQUID 代理验证 .NET2 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3245625/