【发布时间】:2020-05-26 20:37:01
【问题描述】:
我编写了一个 ASP.NET Core 3.1 MVC Web 应用程序。它是一个调用 Web API 后端的前端。
该应用程序在开发和暂存方面完美运行。
我无法让它在生产环境中运行:Web API 似乎还可以,我可以从浏览器或 Postman 中调用它。
但我无法从我的网络应用程序访问它。这是尝试拨打电话时日志中的错误:
信息:System.Net.Http.HttpClient.IApiClient.ClientHandler[100]
发送 HTTP 请求 GET https://webapi.****.it/inetApi/api/links失败:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
执行请求时发生未处理的异常。
System.Net.Http.HttpRequestException:无法建立 SSL 连接,请参阅内部异常。
System.IO.IOException:无法从传输连接读取数据:现有连接被远程主机强行关闭..
System.Net.Sockets.SocketException (10054):现有连接被远程主机强行关闭。
---内部异常堆栈跟踪结束---
Staging 和 Production 都是带有 IIS10 Web 服务器的 Windows server 2019 机器。
Staging 有一个网站,其中 Web API 和 Web 应用程序都作为应用程序运行:
Web-t.****.it/inetApi
Web-t.****.it/inetW
生产虚拟机有两个网站,一个用于内部 Web 应用,另一个用于 API:
webapi.****.it/inetApi
intranet.****.it/inetW
我们从头开始制作这个虚拟机,它是新的,上面没有任何其他应用程序或网站。
我已经尝试将 Web API 应用程序移动到 Web 应用程序的同一个网站,看看这是否可能是问题所在,但事实并非如此。
我试图在我的 startup.cs 中强制网络应用使用 TLS 作为安全协议:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
但它只会改变错误:
信息:System.Net.Http.HttpClient.IApiClient.ClientHandler[100]
发送 HTTP 请求 GET https://webapi.****.it/inetApi/api/links失败:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
执行请求时发生未处理的异常。
System.Net.Http.HttpRequestException:发送请求时出错。
System.Net.Http.WinHttpException (80072EFF, 12030):调用 WINHTTP_CALLBACK_STATUS_REQUEST_ERROR 时出现错误 12030,“与服务器的连接异常终止”。
在 System.Threading.Tasks.RendezvousAwaitable`1.GetResult()
在 System.Net.Http.WinHttpHandler.StartRequestAsync(WinHttpRequestState 状态)
--- 内部异常堆栈跟踪结束 ---
因此,我尝试在暂存或开发时从 Web 应用调用生产 Web API,它可以正常工作。
然后我尝试在生产环境中使用带有暂存 Web API 的网络应用程序......它也可以工作!
这让我发疯了。
就像生产中的所有东西都在单独工作,而不是一起工作。
我有权在虚拟机上做我需要做的所有事情...但我是一名开发人员(并且不擅长处理系统),我无法向系统管理员寻求太多帮助,因为他们不堪重负这段时间。
有什么想法吗?
【问题讨论】:
标签: ssl asp.net-web-api httpclient asp.net-core-3.1 iis-10