【发布时间】: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 R2。 2016 工作得很好。
即使仅包含共享库的程序集,没有声明实际实例或进行引用,甚至没有 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