MPa*_*lak 10 dns azure azure-web-app-service
我有一个 Azure Web 应用程序,它通过 VPN/VNET 集成与 3rd 方系统进行通信。该通信的一部分依赖于解析 DNS 名称的能力。
当应用程序部署到虚拟机时,我们只需使用如下条目更新主机文件
123.45.67.89 RPGMDR500-0R
并且通讯正常。由于通信的设置方式,我不能只在代码中使用 IP 地址。在通信中,DNS 名称被发回给我们,我们必须将其解析为该 IP 地址。
有没有办法只用一个应用服务来做到这一点?实际上,我们希望应用程序将此自定义 dns 名称解析为 ip 地址。
更新 我更新了我们的 VNET DNS 服务器以使用虚拟机设置进行 DNS。
使用 nameresolver,我可以看到 DNS 正在访问应用程序服务,但前提是我指定了 DNS IP 地址。默认情况下,它仍在使用默认服务器(不确定如何)。(对于停电很抱歉,不确定这些数据有多敏感)。
在 Azure Web App 中,您无法将条目添加到主机文件中,因为这是不允许的。
在继续之前,您可能需要首先检查 Web 应用程序是否可以执行名称解析。Azure Web App内置了nameresolver.exe。您可以运行以下命令:
nameresolver www.facebook.com
Run Code Online (Sandbox Code Playgroud)
您可以在代码中进行名称解析。这是 stackoverflow 上的一个讨论线程:How to get the IP address of the server on which my C# application is running on?
它的工作原理是使用System.Net
string url = "www.facebook.com";
IPAddress[] addressList = Dns.GetHostAddresses(url);
Run Code Online (Sandbox Code Playgroud)
据我所知,我们没有权限访问azure web应用程序中的C盘。因此我们无法更改azure web应用程序中的hosts文件。
图片如下:
这是一个解决方法,如果您使用 http 访问 vnet,您可以使用 HttpRequestHeaders 类更改请求主机标头以更改代码中的 dns 名称。
更多详细信息,您可以参考下面的代码示例。
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(@"http://111.111.111.70");
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, @"http://111.111.111.70");
request.Headers.Host = "DNS name";
var re= client.SendAsync(request).Result;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9019 次 |
| 最近记录: |