2009-11-04 25 views
6

Webサービスを使用するクライアントプログラムがあります。これは、多くのインストールで非常にうまく動作します。今では、新しい顧客がプロキシサーバー経由でインターネットに接続し、プログラムがWebサービスにアクセスしようとすると「HTTPステータス407:プロキシ認証が必要です」というエラーが発生します。C#でWCFクライアントを使用してインターネットプロキシサーバー経由でWebサービスを使用する。プロキシサーバー認証を提供する

私は、プロキシサーバーのアドレス、ポート番号、認証を含むすべてのインターネットアクセスの設定がコントロールパネルのインターネットオプションで行われると思っていたので、コード内でそれを心配する必要はありません。 Webサービスクライアントのapp.config内にあります。

私はそれがすべて間違っていますか?私はその間にやっていること

は、ユーザーにプロキシユーザー名とパスワードを設定する機会を与えている、そして私のコードで私は次の操作を行います。

webServiceClient.ClientCredentials.UserName.UserName = configuredUsername; 
webServiceClient.ClientCredentials.UserName.Password = configuredPassword; 

しかし、私は知りませんこれが正しいことです。上記のClientCredentialsは、インターネットプロキシサーバーではなく、Webサービスのバインディング/セキュリティを参照するように見えるので、私には思われます。

私は顧客で試すことができますが、私が最初にやっていることを確かめたいと思います。

答えて

6

私は忘れてしまったあらゆる種類のものを試すことの慌てて別のフォーラムへの貢献者の助けを借りて、このことをどうやって行うのか分かりました。それでは、今、忘れられた人に感謝します。

ここで終わりで働いていたコード(適当に偽装したが、右のアイデアを提供します)です:

BasicHttpBinding binding = new BasicHttpBinding("APISoap"); /* APISoap is the name of the binding element in the app.config */ 
    binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; 
    binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic; 
    binding.UseDefaultWebProxy = false; 
    binding.ProxyAddress = new Uri(string.Format("http://{0}:{1}", proxyIpAddress, proxyPort)); 
    EndpointAddress endpoint = new EndpointAddress("http://www.examplewebservice/api.asmx"); 

    WebServiceClient client = new WebServiceClient(binding, endpoint); 

    client.ClientCredentials.UserName.UserName = proxyUserName; 
    client.ClientCredentials.UserName.Password = proxyPassword; 
+2

Webサービスは、独自の資格情報を必要とする場合、プロキシと一緒にそれらを追加する方法を知っています何がログイン? –

+0

このソリューションは、サービスとプロキシが同じ資格情報を必要とする場合に機能しますが、両方とも資格情報を必要とする場合は、資格情報を設定する方法が必要です。 NTLMで認証されたプロキシの場合、どのような変更が必要ですか? – wintersolider

+0

@net_progとajay:申し訳ありませんが、私は本当に多くの研究をしなければ答えられません。私は5年前に私の解決策を取り戻すことができました。それ以来、この種のことをもう一度見たことはありません。 – Peter

関連する問題