dotnet.exe против w3wp.exe: какая разница? - PullRequest
0 голосов
/ 17 мая 2019

Я видел приложения, размещенные как dotnet.exe, в то время как мое приложение с простым

       WebHost
              .CreateDefaultBuilder(args)
              .UseConfiguration(config)
            //.UseContentRoot(Directory.GetCurrentDirectory())

            .UseEnvironment(environment)

            //.UseIIS() //even commented those; still no effort
            //.UseIISIntegration()
            .UseStartup<Startup>()

работает как w3wp.exe.
Какая разница и как переключать? Я спрашиваю об этом, потому что приложение dotnet.exe с хостом хорошо работает с большим объемом данных (> 5 ГБ), в то время как мое с w3wp.exe не работает на 2,6 ГБ с AccessViolation.

Обновление: мое приложение работает в неуправляемом пуле, в то время как на основе dotnet.exe используется .NET 4.

Ответы [ 3 ]

2 голосов
/ 17 мая 2019

То, о чем вы на самом деле говорите, это две разные вещи.Во-первых, у вас есть концепция работы с веб-сервером, таким как IIS, а не через Kestrel напрямую.Затем есть концепция работы в IIS как в proc, так и вне proc.

Давайте рассмотрим первое.Каждый раз, когда вы запускаете что-либо в IIS, вы получаете процесс w3wp.exe (или несколько, если он выполняется через веб-ферму).Это действительно не имеет ничего общего с .NET Core, это всего лишь процесс для пула приложений в IIS.Вы также можете просто запустить ваше приложение напрямую с помощью dotnet.exe (Kestrel), что, конечно, приводит к запуску этого процесса.

Затем, если вы размещаетесь в IIS, вы можете запускать в proc или out.Вне процесса, прежний по умолчанию (фактически единственный способ), IIS выступает в качестве обратного прокси-сервера - пул приложений (w3wp.exe) передает запросы на фактический процесс приложения, запущенный через Kestrel (dotnet.exe).В этом сценарии присутствуют оба процесса, потому что используются оба.В ASP.NET Core 2.2 появилась новая модель хостинга: в процессе, когда приложение ASP.NET Core запускается непосредственно в пуле приложений, в результате получается просто w3wp.exe.

Длинный и короткий, наличие или отсутствиеИз этих процессов зависит, что вы делаете.Если вы используете IIS в любой форме или в любой форме, w3wp.exe неизбежен.

FWIW, "w3wp" - это акрионим "World Wide Web Worker Process".Это, вероятно, делает более очевидным, почему он вездесущ в сценариях размещения IIS: это буквально рабочий процесс, а не веб-запросы.

Что касается более конкретной проблемы, которая, по сути, сводится к исчерпаниюпамять, которая на самом деле не имеет ничего общего с чем-то, кроме как распределение памяти.Пороговое значение 2,6 ГБ кричит 32-битное: максимальное выделение 4 ГБ, и некоторая часть этого посвящена накладным расходам процесса.Тем не менее, нет причин, по которым вы должны работать 32-битным.Если ваш пул приложений работает в 64-битном режиме, вы теоретически можете получить доступ к большему объему памяти, чем вам когда-либо понадобится.Короче говоря, нет ничего присущего IIS или процессу w3wp.exe, который блокирует только 2,6 ГБ выделяемой памяти.В игре должно быть что-то еще.

0 голосов
/ 17 мая 2019

dotnet.exe говорит, что он размещен на веб-сервере по умолчанию Kestrel, а не на IIS w3wp.exe.Kestrel - хостинговая среда по умолчанию (внутренний хостинг).Проверьте файл LaunchSetting.json, и в большинстве случаев вы настроили IIS для размещения вашего приложения

0 голосов
/ 17 мая 2019

Похоже, что есть ответ - https://docs.microsoft.com/en-gb/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.2
Речь идет о модели хостинга.

...