在过去的几天里,我们的 Azure Web 应用程序(托管在北欧数据中心的 S3 网站)在解析主机名时遇到了一些问题。
我们创建了一个非常简单的 .aspx 页面来尝试解析google.com
,有时我们会收到正确的 ip,有时我们会收到此错误:
System.Net.Sockets.SocketException (0x80004005): System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6) at System.Net.Dns.Resolve(String hostName) at ASP._diagnostics_dns_aspx.HostName2IP(字符串主机名)在 ASP._diagnostics_dns_aspx.Resolve(对象发件人,EventArgs e)
解析内部 azure 主机名 (*.cloudapp.azure.com) 或其他主机名 (microsoft.com, ...) 时也会出现同样的问题。
我们的怀疑是托管应用程序的实例之一(我们目前有 2 个实例)的 dns 解析被破坏。
您可以在此处查看完整的 aspx 页面代码:https ://gist.github.com/davideicardi/6d3f5bf45efaeea0e2a03cba58beec5f
但基本上它使用以下代码来解析请求的主机名:
private string HostName2IP(string hostname)
{
var iphost = System.Net.Dns.GetHostEntry(hostname);
var addresses = iphost.AddressList;
var addressList = new System.Text.StringBuilder( );
foreach(var address in addresses)
{
addressList.Append("IP Address: ");
addressList.Append(address.ToString( ));
addressList.Append(";");
}
return addressList.ToString( );
}
任何想法?可能是我们破坏了某些配置,或者 Azure 中存在问题?
更新:如果我在 Kudu PowerShell 控制台中使用[System.Net.Dns]::GetHostEntry("google.com")
或使用nslookup
,则始终解析名称。似乎是仅与我的网站有关的问题。我已经尝试过这两种情况。
我有一张 MS 的公开票,似乎证实它是 Azure 方面的错误。