代码之家  ›  专栏  ›  技术社区  ›  Henk Holterman

如何使用SQUID代理验证.NET2 Webservice

  •  2
  • Henk Holterman  · 技术社区  · 15 年前

    我有一个小实用程序,它是一个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”创建网络凭据时,它在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被拒绝/407 1759连接someurl:443-NONE/-text/html
    ... 32 192.168.15.95 TCP被拒绝/407 2055连接someurl:443-NONE/-text/html
    ... 31 192.168.15.95 TCP被拒绝/407 1759连接someurl:443-NONE/-text/html

    具体问题:

    • NET2 SOAP和Squid有什么已知问题吗?
    • 测试的显示是否有意义?
    • 还有什么我要找的吗?
    4 回复  |  直到 15 年前
        1
  •  4
  •   NakedBrunch    15 年前

    在连接完成之前,有可能正在回收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重新生成文件,您需要再次修改该文件。

        2
  •  2
  •   Nasko    15 年前

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

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

        3
  •  0
  •   ajay_whiz    15 年前

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

        4
  •  0
  •   ajay_whiz    15 年前

    你能试着在你的squid配置中向域添加“http\u access allow”吗