2

我有一个小实用程序,它是一个 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 客户端正在通过代理 OK。

我没有直接访问该站点的权限,但只能查看一些日志文件。最引人注目的是我在 PCAP (Wireshark) 文件中看到的内容。当我使用 userName="Henk", domain="TEST" 创建 NetworkCredential 时,它在 PCAP 中显示为

... HTTP CONNECT someurl:443 HTTP/1.1,NTLMSSP_AUTH,用户:T\H

当我查看 PCAP 的工作服务时

... HTTP CONNECT someurl:443 HTTP/1.0,NTLMSSP_AUTH,用户: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 连接 someurl:443 - NONE/- text/html

具体问题:

  • .NET2 SOAP 和 Squid 的任何已知问题?
  • TEST\Henk 显示为 T\H 有意义吗?
  • 还有什么我应该寻找的吗?
4

4 回答 4

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 重新生成文件,并且您需要再次修改该文件。

于 2010-07-22T12:33:19.463 回答
2

T\H 可能表明您将 Unicode 字符串用作 ASCII 字符串。由于 Unicode 字符是两个字节(Windows 上最常见的情况),如果您将它们解释为 ASCII,您将得到真正的字符和一个空终止符字节。

我不希望在 .NET 应用程序中看到这种类型的错误,但你永远不会知道。

于 2010-07-19T18:33:05.540 回答
0

我看到 squid 日志显示拒绝访问someurl:443 ... 端口 443 是安全通道端口 (SSL)。通常,托管在 SSL 上的 Web 服务需要某种身份验证。请检查网络服务凭证要求。您可能必须通过证书传递凭据或将自己验证为有效客户端。

于 2010-07-21T19:30:37.387 回答
0

您可以尝试将“http_access allow”添加到您的 squid 配置中的域吗

于 2010-07-23T11:10:06.417 回答