.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アドレスからホスト名を解決できない場合、例外がスローされるようになりました)。