App Pool останавливается после закрытия VS2019 - PullRequest
0 голосов
/ 21 марта 2020

У меня есть приложение. NET Core 3.1, которое останавливает свой пул приложений на IIS каждый раз, когда я делаю следующее:

  1. Я отлаживаю свой код
  2. Остановить отладчик
  3. Закрыть Visual Studio 2019

Если я просто остановлю отладчик, этого не произойдет, это произойдет только после закрытия Visual Studio 2019 после того, как я перестал отлаживать свой код.

Я попробовал несколько вещей, но ничего не исправило.

Кто-нибудь сталкивался с этим раньше?

Ответы [ 2 ]

1 голос
/ 23 марта 2020

Я попробовал то же самое на моей студии Viual и локальном IIS. И рабочий prceoss прекращается, когда я закрываю визуальную студию.

Итак, просмотренный просмотрщик событий, но в то время ничего не регистрировалось. Затем я создал отладочную диагностику c для инструмента точки останова ntdll! NtTerminateProcess. На этот раз сгенерирован дамп. enter image description here

Вот полная трассировка стека для всех потоков

.  0  Id: 688.415c Suspend: 1 Teb: 00000039`02299000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`0247f938 00007ffb`15c6a954 ntdll!NtTerminateProcess
01 00000039`0247f940 00007ffb`1486cd8a ntdll!RtlExitUserProcess+0x54
02 00000039`0247f970 00007ffb`147da245 kernel32!ExitProcessImplementation+0xa
03 00000039`0247f9a0 00007ffb`147da8b5 msvcrt!_crtExitProcess+0x15
04 00000039`0247f9d0 00007ff7`79ca3214 msvcrt!doexit+0x171
05 00000039`0247fa40 00007ffb`14867bd4 w3wp!__wmainCRTStartup+0x164
06 00000039`0247fa80 00007ffb`15c6ced1 kernel32!BaseThreadInitThunk+0x14
07 00000039`0247fab0 00000000`00000000 ntdll!RtlUserThreadStart+0x21

   1  Id: 688.afc Suspend: 1 Teb: 00000039`022a3000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`026ff848 00007ffb`15c34060 ntdll!NtWaitForWorkViaWorkerFactory+0x14
01 00000039`026ff850 00007ffb`14867bd4 ntdll!TppWorkerThread+0x300
02 00000039`026ffc10 00007ffb`15c6ced1 kernel32!BaseThreadInitThunk+0x14
03 00000039`026ffc40 00000000`00000000 ntdll!RtlUserThreadStart+0x21

   2  Id: 688.3f78 Suspend: 1 Teb: 00000039`022a5000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`0277f858 00007ffb`13266951 ntdll!NtDelayExecution+0x14
01 00000039`0277f860 00007ffb`0aba6bdb KERNELBASE!SleepEx+0xa1
02 00000039`0277f900 00007ffb`0ab748e4 winhttp!SafeTerminateDll+0xcb
03 00000039`0277f940 00007ffb`15c305ac winhttp!FailFastThreadpoolWaitCallback<&SafeTerminateDll>+0x14
04 00000039`0277f980 00007ffb`15c341c2 ntdll!TppExecuteWaitCallback+0xa4
05 00000039`0277f9d0 00007ffb`14867bd4 ntdll!TppWorkerThread+0x462
06 00000039`0277fd90 00007ffb`15c6ced1 kernel32!BaseThreadInitThunk+0x14
07 00000039`0277fdc0 00000000`00000000 ntdll!RtlUserThreadStart+0x21

   3  Id: 688.748 Suspend: 1 Teb: 00000039`022b9000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`02bff848 00007ffb`15c34060 ntdll!NtWaitForWorkViaWorkerFactory+0x14
01 00000039`02bff850 00007ffb`14867bd4 ntdll!TppWorkerThread+0x300
02 00000039`02bffc10 00007ffb`15c6ced1 kernel32!BaseThreadInitThunk+0x14
03 00000039`02bffc40 00000000`00000000 ntdll!RtlUserThreadStart+0x21

   4  Id: 688.3b38 Suspend: 1 Teb: 00000039`022bd000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`02cffad8 00007ffb`132784c3 ntdll!NtRemoveIoCompletion+0x14
01 00000039`02cffae0 00007ffa`b8a238e2 KERNELBASE!GetQueuedCompletionStatus+0x53
02 00000039`02cffb40 00000000`00000000 <Unloaded_aspnetcore.dll>+0x38e2

   5  Id: 688.3cf8 Suspend: 1 Teb: 00000039`022c9000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`024ff788 00007ffb`15c34060 ntdll!NtWaitForWorkViaWorkerFactory+0x14
01 00000039`024ff790 00007ffb`14867bd4 ntdll!TppWorkerThread+0x300
02 00000039`024ffb50 00007ffb`15c6ced1 kernel32!BaseThreadInitThunk+0x14
03 00000039`024ffb80 00000000`00000000 ntdll!RtlUserThreadStart+0x21

Вы можете видеть, что когда вы закрываете Visual Studio, она просто вызывает функцию безопасного завершения и прекратить процесс. Никакого странного поведения или исключения не генерируется. Так и должно быть по замыслу.

Если вы go обращаетесь к диспетчеру IIS, вы увидите, что пул приложений будет остановлен при закрытии VS. enter image description here

Если вы не хотите, чтобы Visual Studio повредил ваш рабочий процесс IIS. Затем отладьте его в другой среде профиля и опубликуйте sh версию выпуска на локальном IIS.

0 голосов
/ 21 марта 2020

Я думаю, что это предполагаемое поведение.

По умолчанию Visual Studio использует IIS Express для размещения ваших сайтов. IIS Express - это служба, которая запускается Visual Studio при запуске отладки и продолжает работать, пока вы не закроете Visual Studio (или не остановите ее вручную).

Если вы хотите, чтобы она сохранялась, вам потребуется для отладки с использованием локального экземпляра IIS, отличного от Express.

...