1

当我从桌面上的控制台应用程序调用 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 名称服务查询”通过网络发送。有任何想法吗?

4

2 回答 2

1

问题已解决:我工作站上的防病毒程序明确阻止来自 IIS 的传出连接,表面上是为了阻止蠕虫在网络中传播。

于 2012-06-13T13:56:04.753 回答
0

http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/2a8ca3c8-e1ec-490a-a7e5-5ec533080f00/

如果您将 IP 地址文字传递给 GetHostEntry,它将尝试 DNS 反向解析,而不是仅仅将 IP 地址返回给您。如果成功反向解析的数据不在您的 DNS 服务器中,这将失败。如果您不想要这种语义(即没有反向查找),请使用 Dns.GetHostAddresses。

于 2012-05-31T16:12:33.667 回答