2

我们正在测试一个 ASP.net 核心应用程序,该应用程序在 IIS 自动使用的“反向代理”系统内运行 dotnet.exe 进程时崩溃,如果您已将 IIS .net 核心托管选项安装到您的计算机中。

一旦 dotnet 进程(在我们的例子中是 5 个)崩溃,所有请求都会返回 502 错误,并且 IIS 不会通过重新启动 dotnet 进程来恢复。

IIS 日志记录(在事件查看器中)中没有任何内容可以指示池崩溃的原因,有时 IIS 管理 UI 显示池“已停止”,有时“已启动”,但在任务管理器中,所有 dotnet .exe 进程已消失。

我们将一分为二(从我们之前提交的代码中重建)直到我们隔离它,但这个问题主要是关于 ISS 和 DotNet 反向代理:

  • 除了事件查看器eventvwr.msc(事件查看器中没有看起来相关的当前项目。除了我们发生崩溃的那几天之外,还有几天的消息显示 WAS 正在启动和重新启动 IIS 池,但在 dotnet 进程刚刚消失时没有消息。

事件查看器中的 iis 消息

  • dotnet 运行时中是否存在任何已知错误导致其崩溃,并且 IIS 无法恢复并重新启动该进程?

  • 我从 IIS 看到的唯一日志是 GET/POST 请求,其中没有有用的信息C:\inetpub\logs\LogFiles\...

更新:从今天开始,我现在看到一些相关的事件查看器条目: Failed to start process with commandline '"dotnet" .\MyCompany.Authorization.Api.dll', ErrorCode = '0x80004005'. from Source: IIS AspNetCore Module

4

1 回答 1

0

在这种情况下,似乎 IIS 本身崩溃了,而不是我的应用程序池中的 dotnet 进程。我的证据是 C:\inetpub\logs\LogFiles\W3SVC1 中的日志文件显示了这一点,看起来 IIS 本身正在崩溃并被重新启动。注意看起来像一些初始启动/启动日志记录开头的“#”:

2016-08-03 13:30:09 W3SVC1 192.168.215.35 GET /api/v3/fhir/patient/311 - 80 - 192.168.215.164 HTTP/1.1 python-requests/2.10.0 - dev-html5.mycompany.biz 404 0 2 1405 1099 0
2016-08-03 13:31:19 W3SVC1 192.168.215.35 OPTIONS /api/v3/fhir/code _dc=1470231079494 80 - 192.168.225.119 HTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 http://localhost:8086/ dev-html5.mycompany.biz 200 0 0 206 544 109
2016-08-03 13:31:21 W3SVC1 192.168.215.35 OPTIONS /api/v3/fhir/imagingstudy/297 _dc=1470231081268 80 - 192.168.225.119 HTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 http://localhost:8086/ dev-html5.mycompany.biz 200 0 0 206 556 312
2016-08-03 13:31:33 W3SVC1 192.168.215.35 OPTIONS /api/v3/fhir/code _dc=1470231093098 80 - 192.168.225.119 HTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 http://localhost:8086/ dev-html5.mycompany.biz 200 0 0 206 544 53
2016-08-03 13:31:34 W3SVC1 192.168.215.35 OPTIONS /api/v3/fhir/imagingstudy/297 _dc=1470231094714 80 - 192.168.225.119 HTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 http://localhost:8086/ dev-html5.mycompany.biz 200 0 0 206 556 59
#Software: Microsoft Internet Information Services 8.5
#Version: 1.0
#Date: 2016-08-03 13:33:03
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2016-08-03 13:33:03 W3SVC1 192.168.215.35 GET /api/v3/fhir/organization/1 - 80 - 192.168.215.35 HTTP/1.1 Mozilla/5.0+(Windows+NT+6.3;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 - dev-html5.mycompany.biz 502 5 0 1627 1255 519
2016-08-03 13:33:10 W3SVC1 192.168.215.35 GET /api/v3/authorize/login username=admin&password=mycompanyx 80 - 192.168.215.164 HTTP/1.1 python-requests/2.10.0 - dev-html5.mycompany.biz 502 5 0 1627 210 520
2016-08-03 13:33:23 W3SVC1 192.168.215.35 GET /api/v3/fhir/organization/1 - 80 - 192.168.215.35 HTTP/1.1 Mozilla/5.0+(Windows+NT+6.3;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 - dev-html5.mycompany.biz 502 5 0 1627 1255 523
#Software: Microsoft Internet Information Services 8.5
#Version: 1.0
#Date: 2016-08-03 13:34:06
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2016-08-03 13:34:06 W3SVC1 192.168.215.35 OPTIONS /api/v3/fhir/linkage/patient/315 _dc=1470231246063 80 - 192.168.225.30 HTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 http://localhost:8086/ dev-html5.mycompany.biz 502 5 0 1627 511 548
#Software: Microsoft Internet Information Services 8.5
#Version: 1.0
#Date: 2016-08-03 13:34:18
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2016-08-03 13:34:18 W3SVC1 192.168.215.35 GET /api/v3/fhir/organization/1 - 80 - 192.168.215.35 HTTP/1.1 Mozilla/5.0+(Windows+NT+6.3;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 - dev-html5.mycompany.biz 502 5 0 1627 1255 531
2016-08-03 13:34:41 W3SVC1 192.168.215.35 GET /api/v3/authorize/login username=admin&password=mycompanyx 80 - 192.168.215.164 HTTP/1.1 python-requests/2.10.0 - dev-html5.mycompany.biz 502 5 0 1627 210 531
2016-08-03 13:34:46 W3SVC1 192.168.215.35 OPTIONS /api/v3/fhir/code _dc=1470231282672 80 - 192.168.225.119 HTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 http://localhost:8086/ dev-html5.mycompany.biz 502 5 0 1627 544 777
2016-08-03 13:34:46 W3SVC1 192.168.215.35 OPTIONS /api/v3/fhir/imagingstudy/297 _dc=1470231284575 80 - 192.168.225.119 HTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 http://localhost:8086/ dev-html5.mycompany.biz 502 5 0 1627 556 1037
2016-08-03 13:34:57 W3SVC1 192.168.215.35 GET /api/v3/fhir/organization/1 - 80 - 192.168.215.35 HTTP/1.1 Mozilla/5.0+(Windows+NT+6.3;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 - dev-html5.mycompany.biz 502 5 0 1627 1221 530
2016-08-03 13:35:00 W3SVC1 192.168.215.35 OPTIONS /api/v3/fhir/code _dc=1470231299728 80 - 192.168.225.119 HTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/51.0.2704.103+Safari/537.36 http://localhost:8086/ dev-html5.mycompany.biz 502 5 0 1627 544 527

我将尝试制作一个可重复的测试基础,但目前这似乎与:

  1. Windows Server 2012 R2 上的 IIS,安装了 dotnet IIS 托管更新,以及所有最新的 Windows 更新。

  2. IIS 在单个应用程序池中托管多个应用程序。由于已知问题(像这样),微软可能“不推荐”这个决定(由我决定)在单个池中托管多个应用程序,但是当我有更好的信息时,我会更新这个答案。

此外,当 IIS 崩溃时,IIS 失败请求跟踪 (FREB) 似乎很有用。见这篇文章

更新:我设置了一个 Azure VM,并且能够重现并向 Microsoft 提供详细信息。该研究的结果发布在此处的 IISIntegration Github 问题 245 上。. Microsoft 的某个人向我建议了针对我遇到的特定问题的解决方法,解决方法的想法是:

  • 在部署的 IIS dotnet 核心应用程序中,将相对 web.config 启动文件名更改为绝对文件名,例如从更改<aspNetCore processPath="dotnet" arguments=".\yourapp.dll" ... /><aspNetCore processPath="dotnet" arguments="c:\full\path\to\yourapp.dll" ... />,并对 Startup.cs 和 Program.cs 进行代码更改,以检查环境何时为 Release,如果是,则始终获取应用程序当前工作目录作为 web 根目录,而不是提供的环境 web 根目录。

  • 在运行时,每次部署后,手动重新应用 web.config 更改,因为您无法修改项目中的 web.config 源(输入)文件,只能修改部署的最终二进制内容(在进行 dotnet 发布之后)。

于 2016-08-03T13:44:37.780 回答