37

HOSTSファイルを変更するときに.NETWebRequestを使用しています。System.Netがこれらの変更を尊重していないことを確認していますが、どうすればそれを実現できますか?

単一のホスト名の背後に多数のサーバーが負荷分散されています。たとえば、「example.com」としましょう。それらのいくつかを個別にターゲットにしたいので、example.comにリクエストを送信する前に、プログラムはHOSTSファイルにマシン固有のIPアドレスをハードコーディングします。

163.56.0.34  example.com

最初のサーバーと最初のリクエストの場合、これは正常に機能します。次に、私のプログラムはHOSTSファイルを再度変更します。

163.56.0.48  example.com

そして、新しいHttpWebRequestを作成します。これを送信すると、NETMONで、予想される2番目のIPアドレスではなく最初のIPアドレス(163.56.0.34)に送信されることがわかります。

ブレークポイントとデバッグトレースを使用して、毎回正しい値がHOSTSファイルに書き込まれることを確認しました。ブラウザまたは他のプログラムからexample.comにアクセスしようとすると、HOSTSファイルを尊重し、2番目のIPアドレスに移動します。

NETMONを使用して、リクエストが表示されているIPアドレスに直接送信されることを確認しました。HTTPプロキシはありません。

他のすべては変更されたHOSTSファイルを尊重しているので、System.Netインフラストラクチャがexample.comなどのDNSホスト-IPアソシエーションをキャッシュしていることを強く疑っています。ただし、このキャッシュへの参照は見つからず、フラッシュしたりオフにしたりする方法もわかりません。

キャッシュを処理するための手順、これらの症状を引き起こしている可能性のある他の原因に関する提案、または役立つ可能性のある他の提案された診断手順を歓迎します。

4

4 に答える 4

48

私は最終的にこれを修正するMSDNからあいまいなコマンドを掘り起こしました:

ServicePointManager.DnsRefreshTimeout = 0;

以前に試したすべての奇妙なことを解きほぐすと、上記の設定と一緒に必要な別の設定が 1 つ見つかりました。リクエスト オブジェクトで、キープアライブをオフにします。

request.KeepAlive = false;
于 2011-09-01T23:19:21.160 に答える
5

DnsRefreshTimeout > 0 を維持したい場合は、以下を呼び出してキャッシュを更新できます。

System.Net.Dns.GetHostEntry("example.com");
于 2014-06-07T12:42:50.660 に答える
3

System.Diagnostics.Process を使用して ipconfig /flushdns を起動できます

于 2011-09-01T23:11:25.817 に答える