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 を使用するようにセットアップされています。これは問題なく動作しているようです。Proxy OK を通過している他の WebService クライアントがあります。

サイトに直接アクセスすることはできませんが、いくつかのログファイルを確認するだけです。最も注目すべきは、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 CONNECT someurl:443 - なし/- text/html

具体的な質問:

  • .NET2 SOAP と Squid に関する既知の問題はありますか?
  • TEST\Henk が T\H として表示されることは重要ですか?
  • 他に探すべきものはありますか?
4

4 に答える 4

4

接続が完了する前に NTLM 接続がリサイクルされ、新しい/2 番目の匿名接続要求と 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 文字は 2 バイトであるため (Windows で最も一般的なケース)、それらを ASCII として解釈すると、実際の文字とヌル ターミネータ バイトが得られます。

.NET アプリでこの種のエラーが発生するとは思いませんが、わかりません。

于 2010-07-19T18:33:05.540 に答える
0

Squid のログを見ると、someurl:443へのアクセスが拒否されていることがわかります。ポート 443 はセキュア チャネル ポート (SSL) です。一般的に、SSL でホストされている Web サービスには何らかの認証が必要です。Web サービス資格情報の要件を確認してください。資格情報を渡すか、証明書を通じて有効なクライアントとして自分自身を認証する必要がある場合があります。

于 2010-07-21T19:30:37.387 に答える
0

squid 設定のドメインに「http_access allow」を追加してみてください。

于 2010-07-23T11:10:06.417 に答える