3

サーバー (多くの IP を持つ) 上の特定の IP に HttpWebRequest 呼び出しをバインドしようとしています。BindIPEndPointDelegate を使用してこのコードを正常に記述し、ローカル マシン (Windows 7) で正常に動作します。

私の問題は Windows Server 2008 にあります。Windows Server 2008 で同じコンソール アプリを実行すると、デリゲートの使用時に IP へのバインドに失敗します。さらに複雑なことに、一部の宛先 URL (http://www.microsoft.com) では機能するように見え、一部の URL ( http://www.google.com、http://www.facebook.com ) では機能しないようです。コム

IP 固有のバインディング (デリゲート) を削除してアプリを実行すると、すべての URL で機能します。

私がバインドしている IP はデフォルトのサーバー IP アドレスです。つまり、両方のシナリオで同じ IP を使用する必要があります。これを確認しましたが、デリゲートを使用してバインドしない場合、同じ IP を使用します。IP を明示的に指定すると、上記のように失敗します。

ファイアウォール、IIS、ウイルス対策をオフにしようとしましたが、問題は解決しません。

4

1 に答える 1

1

よし、やっとわかった。

再度テストしたところ、IPAddress.Any の指定も機能しないことがわかりました。一方、IPAddress.IPv6Any は問題なく動作しました。

最後に、ネットワーク アダプターの設定で IPv6 プロトコルのチェックを外すと、アプリはすべての URL に対して適切に機能し始め、すべてのローカル IPv4 アドレスにバインドされました。

これが .NET コードまたは機能のバグかどうかはわかりませんが、IPv6 を無効にすると修正されました。

最後に、バインディングを使用して呼び出しを行っているときに「要求されたアドレスはそのコンテキストでは有効ではありません」というメッセージが表示される場合は、ウイルス対策を無効にしてみてください。

于 2012-10-21T16:19:54.937 に答える