Skip to main content
 首页 » 编程设计

c#之如何使用 SQUID 代理验证 .NET2 Web 服务

2024年01月29日28sxdcgaq8080

我有一个小实用程序,它是一个 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 重新生成文件,您将需要再次修改文件。