当我从桌面上的控制台应用程序调用Dns.GetHostEntry(“SomeServerName”)时,它可以很好地解析IP地址。当我在ASP.NET应用程序中执行相同的代码,也在我的桌面上运行时,我收到一个带有“未知主机”消息的SocketException。
我感觉我的IIS / ASP.NET安装可能有问题,但我现在没时间尝试重新安装。
作为测试,我在machine.config中更改了ASP.NET帐户的标识,以使用我自己的网络凭据,但这没有任何区别。
有什么想法吗?
更新
我似乎需要澄清一下。我在工作站上从ASP.NET进行网络通信时遇到问题。这包括尝试使用SmtpClient发送电子邮件,并尝试通过ODBC连接连接到IBM DB2。在控制台应用程序中运行时,这些都可以正常工作。根本原因似乎是当代码在ASP.NET下运行时,DNS解析失败,尽管我不知道为什么。我能想到的唯一区别是安全环境。
更新2:
以下是运行Wireshark的一些结果: 当从控制台应用程序进行调用时,我立即看到通过网络发送了2个“标准域名系统查询”。 当从ASP.NET应用程序进行相同的调用时,在大约8秒的延迟后,我看到通过网络发送了3个“NetBIOS名称服务查询”。 有什么想法吗?
答案 0 :(得分:1)
问题解决了:我的工作站上的防病毒程序明确地阻止了来自IIS的传出连接,表面上是为了阻止蠕虫在网络中传播。
答案 1 :(得分:0)
如果您将IP地址文字传递给GetHostEntry,它将尝试a DNS反向解析而不是仅仅返回IP地址。 如果成功反向解析的数据不在您的DNS中 服务器,这将失败。如果你不想要这种语义(即没有 反向查找),然后使用Dns.GetHostAddresses。