HTTP プロキシ サーバーを介して Web サービスを使用する .NET クライアントでエラーが発生する

この記事は、.NET クライアントを使用して HTTP プロキシ サーバーを介して Web サービスを使用するときに、エラー (基になる接続が閉じられました: リモート名を解決できませんでした) が発生する問題を解決するのに役立ちます。

元の製品バージョン: .NET Framework
元の KB 番号: 318140

現象

.NET クライアントを使用して HTTP プロキシ サーバーを介して Web サービスを使用すると、次のエラー メッセージが表示される場合があります。

基になる接続が閉じられました:リモート名を解決できませんでした。

原因

Web サービスと .NET クライアントの間に HTTP プロキシ サーバーが存在し、適切なプロキシ設定が構成されていません。

解決方法

この問題を解決するには、.NET クライアントに適切なプロキシ構成設定を指定します。

Machine.config ファイルの既定の設定を次に示します。

<configuration>
    <system.net>
        <defaultProxy>
            <proxy
               usesystemdefault = "true"
            />
        </defaultProxy>
    </system.net>
</configuration>

既定の設定でプロキシ サーバーの設定が自動的に検出されない場合は、false に設定usessystemdefaultしてから、プロキシ サーバーを明示的に指定します。 プロキシ サーバーを明示的に指定するには、 Machine.config または Web.config ファイルを使用するか、プログラムでサーバーを指定します。

プロキシ サーバーを指定するには、次のように Machine.config または Web.config ファイルの設定を設定します。

<configuration>
    <system.net>
        <defaultProxy>
            <proxy
               usesystemdefault = "false"
               proxyaddress="http://proxyserver"
               bypassonlocal="true"
            />
        </defaultProxy>
    </system.net>
</configuration>

オブジェクトを使用してプログラムで設定を WebProxy 変更するには、次のサンプル コードを使用します。

using System.Net;
com.someserver.somewebservice.someclass MyWebServiceClass = new com.someserver.somewebservice.someclass ();
IWebProxy proxyObject = new WebProxy ("http://myproxyserver:80", true);
MyWebServiceClass.Proxy = proxyObject;
MyWebServiceClass.MyWebMethod ();

NTLM 認証を必要とするプロキシ サーバー

プロキシ サーバー Windows NT LAN Manager (NTLM) 認証を設定するには、次のサンプル コードを使用します。

using System.Net;
WebProxy myProxy = new WebProxy ("http://proxyserver:port", true);
myProxy.Credentials = CredentialCache.DefaultCredentials;
FindServiceSoap myFindService = new FindServiceSoap ();
myFindService.Proxy = myProxy;

システム全体のプロキシを既定で使用することもできます。 これを行うには、構成ファイルで次の設定を使用します。

<configuration>
    <system.net>
        <defaultProxy>
            <proxy
               proxyaddress = "http://proxyserver:80"
               bypassonlocal = "true"
            />
        </defaultProxy>
    </system.net>
</configuration>

関連情報