You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IIS部署ASP.NET MVC应用调用API报ordersuat远程名称无法解析如何解决

问题根因

System.Net.WebException: The remote name cannot be resolved: 'ordersuat' 本质是DNS解析失败,和IIS本身配置无关:你本地开发环境的DNS配置可以解析ordersuat内网域名,但部署应用的IIS服务器没有对应的DNS解析规则,你在服务器上执行ping命令返回找不到主机的结果已经验证了这一点。

标准排查步骤

  • 登录IIS服务器,打开C:\Windows\System32\drivers\etc\hosts文件,检查是否有ordersuat对应的IP映射,没有的话手动添加一行:[ordersuat服务的内网IP] ordersuat,保存后执行ipconfig /flushdns刷新DNS缓存即可生效,不需要重启服务器
  • 检查IIS服务器的网卡DNS配置,确认是否和你本地使用的内网DNS地址一致,如果是公司内网域名,必须配置内网DNS服务器才能正常解析
  • 在IIS服务器上执行nslookup ordersuat,可以直接查看当前使用的DNS服务器是否能返回正确的解析结果,定位是DNS服务器问题还是本机配置问题

现有代理方案的优化建议

你目前通过defaultProxy配置走代理绕过本地DNS解析的方案可以解决问题,但可以根据实际场景做以下优化:

  • 如果ordersuat是内网服务,优先使用hosts配置/内网DNS解析的方案,不需要走代理链路,既可以降低请求延迟,也可以避免代理节点故障导致接口不可用
  • 如果必须使用代理,不要把代理地址硬编码在web.config里,建议放到环境变量、配置中心或者web.config的AppSettings节点,不同部署环境(UAT、生产)可以灵活切换,不需要重新编译或者修改打包后的配置文件
  • 现有代码中每次请求都新建HttpClient实例的写法有问题,高并发场景下会导致socket端口耗尽,建议用单例模式复用HttpClient,如果是.NET Core/.NET 5+环境,直接用框架自带的IHttpClientFactory注入即可
  • 不要用.Result同步等待异步请求,ASP.NET 环境下很容易出现线程死锁,建议把接口逻辑改成异步方法,用await关键字等待PostAsync的返回结果,参考写法:
HttpResponseMessage response = await httpClient.PostAsync(url, encodedRequest);
  • 如果是.NET Core/.NET 5+环境,不需要在web.config里配置全局代理,可以在注入HttpClient的时候单独为这个接口客户端配置代理,避免全局代理影响其他外部接口请求:
services.AddHttpClient("OrderApiClient", client =>
{
    client.BaseAddress = new Uri("http://ordersuat/");
}).ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
{
    Proxy = new WebProxy("http://[代理服务器IP]:[代理端口]/", false),
    UseProxy = true
});

内容的提问来源于stack exchange,提问作者Shaun Falconer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:27:02