【问题标题】:.NET process failing DNS lookup with Windows 7.NET 进程无法使用 Windows 7 进行 DNS 查找
【发布时间】:2011-05-21 02:41:21
【问题描述】:

我有一个应用程序在 Windows 7 下的 DNS 查找 (System.Net.Dns.GetHostEntry) 失败。此应用程序在 XP 下运行良好。

正在生成的错误是套接字错误代码11003:

WSANO_RECOVERY 11003
这是一个不可恢复的错误。 这表明在数据库查找期间发生了某种不可恢复的错误。这可能是因为找不到数据库文件(例如,与 BSD 兼容的 HOSTS、SERVICES 或 PROTOCOLS 文件),或者服务器返回的 DNS 请求出现严重错误。

特别有趣的是,这个进程直接从网络共享运行。如果我在 Win 7 下本地运行它,它工作正常。

我已完全信任所有版本的 caspol(32 位和 64 位)下的网络位置。

是否有任何其他 .NET 或 Windows 7 安全设置阻止从网络共享位置运行的进程进行 DNS 查找?

【问题讨论】:

  • 感谢您提出这个问题。您的问题告诉我,如果我从本地机器而不是网络驱动器运行我的程序,GetHostEntry 将正常工作。 :)

标签: .net windows-7


【解决方案1】:

原来这是 caspol。

但在 Windows 7 上,仅在管理员组中是不够的。

您还必须右键单击 .NET 命令提示符快捷方式并选择“以管理员身份运行”以绕过 UAC。

然后正常的 caspol 命令将起作用。

【讨论】:

    【解决方案2】:

    通过从网络共享运行的 .Net 应用程序连接到 SQL Server 时遇到类似问题。

    使用 Win7/2008,您必须阅读、列出从共享文件夹到应用程序文件夹的每个文件夹的文件夹内容。如果存在没有任何权限的中间文件夹,则连接失败。

    适用于 XP。

    【讨论】:

      【解决方案3】:

      如果你传递一个 IP 地址,值得注意的是,默认情况下,它使用 IPv6,根据文档,它会抛出 exception。

      我的建议是使用以下代码获取 IPv4 地址:

        IPAddress ipv4 = Dns.GetHostAddresses(address).Where(x=>x.AddressFamily == AddressFamily.InterNetwork).FirstOrDefault();
      

      【讨论】:

      • 我实际上使用的是主机名,尽管使用 IP 地址失败并出现同样的错误。该链接上的注释指出,DNS 在“互联网区域”中的任何内容上都会自动失败。所以我要调查一下。
      • 安全区域是我的电脑,因此排除了这一点。
      • 你试过我的代码了吗?按照我的描述获取 IPv4 地址,然后通过传递 IPv4 调用 GetHostEntry。那应该可以。
      【解决方案4】:

      好的,要轻松测试您的 dns 是否配置正确,只需在根目录中添加一个 html 页面。如果此页面按预期呈现,则 dns 很好。

      每个人都有自己的检查方式,这很完美,因为我们可以分享我们的经验。我喜欢将我的代码/页面的一部分放到服务器上,与我想一次完成的事情有关。

      希望这会有所帮助...

      【讨论】:

      • 这是一个胖客户端 WPF 应用程序,而不是一个 Web 应用程序。
      • @GusPaul,应用程序是基于 WPF 还是基于 Web 并不重要。他在告诉你测试 DNS 的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多