6

Webサービスを利用するクライアントプログラムがあります。多くのインストールで非常にうまく機能します。新しい顧客がプロキシサーバーを介してインターネットに接続し、プログラムがWebサービスにアクセスしようとすると、「HTTPステータス407:プロキシ認証が必要です」というエラーが発生する状況が発生しました。

プロキシサーバーアドレス、ポート番号、認証を含むインターネットアクセスのすべての構成は、コントロールパネルのインターネットオプションで行われ、コードやアプリでさえ心配する必要はないと思いました。 Webサービスクライアントの構成。

私はそれをすべて間違っていますか?

その間に私が行ったことは、ユーザーにプロキシユーザー名とパスワードを構成する機会を与えることです。次に、私のコードで次のことを行います。

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

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

お客様に試してみることができると思いますが、まずは自分が何をしているのかを確認したいと思います。

4

1 に答える 1

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;
于 2009-11-06T12:26:24.687 に答える