9

.NET 2.0 / 3.5環境で次のコードを何ヶ月も(問題なく)使用しています。

string server="192.168.1.3";
IPHostEntry ipe = System.Net.Dns.GetHostEntry(server);
IPAddress ipa = ipe.AddressList[0];
IPEndPoint ipep = new IPEndPoint(ipa, (int)UdpServices.Domain);

ここでは、サーバーはIPアドレスにハードコードされていますが、私のアプリケーションでは、「server.test.com」のようなものである可能性があります。

プロジェクトを.NET4.0に変換するときに、IPアドレスを直接渡すと、このコードは機能しなくなりました(ホスト名でも機能します)。この例外でクラッシュします:

System.Net.Sockets.SocketException was unhandled
  Message=The requested name is valid, but no data of the requested type was found
  Source=System
  ErrorCode=11004
  NativeErrorCode=11004
  StackTrace:
       at System.Net.Dns.InternalGetHostByAddress(IPAddress address, Boolean includeIPv6)
       at System.Net.Dns.GetHostEntry(String hostNameOrAddress)

必要なのは結果のIPEndPointだけなので、IPAddress.Parseを使用してIPAddressオブジェクトを生成することで問題を回避できますが、この動作が.NET4.0で変更された理由を知っている人がいるかどうか知りたいですか。(IPアドレスからホスト名を解決できない場合、例外がスローされるようになりました)。

4

1 に答える 1

7

マイクロソフトはここでこれに答えました:

これは、名前解決の失敗をより一貫して表すために意図的に変更されました。IPAddressesに変換するだけの入力文字列がある場合は、IPAddress.TryParseまたはDns.GetHostAddressesを使用することをお勧めします。

于 2010-09-01T16:20:30.657 に答える