【问题标题】:DNS Resolution failure only on Windows 2012 R2仅在 Windows 2012 R2 上的 DNS 解析失败
【发布时间】:2020-01-17 15:21:38
【问题描述】:

我遇到了一个非常奇怪的错误,我已将其范围缩小到特定场景,但由于潜在的影响,我需要尝试找出原因。

.NET 4.7.2 构建的Application A v 1.0 在Windows Server 2012 R2 上运行良好 Application A v 2.0 也是为 .NET 4.7.2 构建的,但现在使用 .Net Standard 2.0 共享库突然导致 tcp 堆栈失败(特别是所有 DNS 解析都失败,甚至是内部目标)

这个错误只发生在2012 R22016 工作得很好。 即使仅包含共享库的程序集,没有声明实际实例或进行引用,甚至没有 using 语句,只要将共享库包含在依赖项中,就会出现此错误。

在应用程序之外的 DNS 解析工作正常。 FusionLogs 在我的Windows 10 machine 上加载的内容和2012 R2 上加载的内容在功能上是相同的。唯一的区别是加载的本机图像的编码文件夹名称。

这是共享库中所有相关依赖项的列表

BouncyCastle.Crypto v 1.8.5:
    Org.BouncyCastle.Crypto.Parameters;
    Org.BouncyCastle.OpenSsl;
    Org.BouncyCastle.Security;
Common.Logging v 3.4.1:
DnsClient v 1.2.0:
Microsoft.CSharp v 4.7.0:
Mimekit v 2.4.1:
NewtonSoft.Json v 12.0.1:
System v 4.0.0.0:
    System.Collections.Generic;
    System.Collections.Concurrent;
    System.IO;
    System.IO.Compression.FileSystem;
    System.Drawing;
    System.Numerics;
    System.Runtime.Serialization;
    System.Net;
    System.Net.Http;
    System.Net.Http.Headers;
    System.Security.Cryptography;
    System.Text;
    System.Threading;
    System.Threading.Tasks;
    System.Xml;

例外:

17:16:21 [1] [Info] - DNS Query against 'google.com'

Unhandled Exception: System.Net.Sockets.SocketException: No such host is known
   at System.Net.Dns.GetAddrInfo(String name)
   at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
   at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
   at DNSAPITestApp.Tester..ctor() in ...
   at DNSAPITestApp.Program.Main(String[] args) in ...

我已经在网上进行了广泛的搜索,但是有太多类似 DNS 问题的白噪音仍然与这种特定情况或为什么会发生这种情况无关(以及如何确认任何理论同样重要)。

任何帮助将不胜感激。我不能发布很多代码,但是如果有任何特定区域使用了任何人都希望看到的特定依赖项,我可以添加 sn-ps。

【问题讨论】:

  • 如果您没有得到任何有用的答案,请尝试创建一个新的.NET Standard 2.0 库,添加所有相同的依赖项,并将其添加到您的项目中以代替麻烦的依赖项。看看会不会坏掉。如果是这样,请删除对它的依赖,直到东西开始工作。这应该有助于缩小范围
  • @canton7 这肯定有助于缩小范围。我希望避免这样做,但我们会看看我在这里得到了什么。

标签: dns windows-server-2012-r2 .net-standard .net-4.7.2


【解决方案1】:

MSDN@MSDN 上的答案归于 CoolDadTx

库名是个问题。当您编译该库时,它是 DnsApi.dll。这恰好与包含 DNS 本机逻辑的 Windows DLL 同名。当它尝试加载系统 DLL 时,它会找到您的,因为它首先搜索应用程序目录,然后尝试使用它,但是当然,它不起作用。

将类库重命名为其他名称,然后重试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2019-02-03
    • 2020-09-18
    • 1970-01-01
    相关资源
    最近更新 更多