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 オブジェクトに提供するために、独自のコードを挿入する必要がありますか?