12

WinForms アプリから Web サービスを呼び出しています。プロキシ サーバーが使用されていない場合はすべて正常に動作しますが、プロキシが使用されている場合、SOAP 要求に対して予期される XML 応答ではなく、「認証が必要です」という HTML エラー ページが表示されるため、アプリがクラッシュします。

次のようにプロキシを手動で設定できるようです:

WebClient client = new WebClient();
WebProxy wp = new WebProxy("proxy server url here");
client.Proxy = wp;

...しかし、生成されたエラーは実際にはプロキシサーバーから来ているため、ある程度、上記を行わなくてもプロキシサーバーが表示されているようです。ユーザーのコンピューターから Windows 認証のログイン資格情報を取得していないようです。これを強制するにはどうすればよいですか?

自分のマシンで Fiddler を使用してこれをシミュレートした場合 (および [プロキシ認証が必要] オプションを有効にした場合)、ログイン資格情報を求めるダイアログ ポップアップが表示されますが、クライアントのマシン (実際のハードウェア プロキシ - McAfee Web Gateway)。

どうすればこれを処理できますか? ユーザーがサーバーを手動で構成するためのダイアログを提供する必要がありますか?それとも、Windows の既定のプロキシとユーザー自身のログイン資格情報を使用するように WebClient に指示する設定がありますか?

アップデート

以下のコードを使用してプロキシ サーバーを選択できるようですが、すべての状況で認証ダイアログが表示されるわけではありません (一部の PC では機能しますが、他の PC では機能しません)。

IWebProxy defaultProxy = WebRequest.DefaultWebProxy;
if (defaultProxy != null)
{
    defaultProxy.Credentials = CredentialCache.DefaultCredentials;
    client.Proxy = defaultProxy;
}

上記のコードが正しい場合、一部のユーザーが資格情報の入力を求められない理由がわかりません。 ユーザー資格情報を収集して WebRequest オブジェクトに提供するために、独自のコードを挿入する必要がありますか?

4

3 に答える 3

19

追加してみる

  <system.net>
    <defaultProxy useDefaultCredentials="true" />
  </system.net>

app.config ファイルに

于 2013-06-20T16:54:29.740 に答える
0

最初にこれを使用してみてください:

WebProxy proxy = (WebProxy) WebRequest.DefaultWebProxy;
if (proxy.Address.AbsoluteUri != string.Empty)
{
    Console.WriteLine("Proxy URL: " + proxy.Address.AbsoluteUri);
    client.Proxy = proxy;
}

これが機能しない場合は、次を試してください。

WebProxy proxy = WebProxy.GetDefaultProxy()
client.Proxy = proxy;
于 2013-06-15T22:28:13.573 に答える