ASP .NET Core - Modelo de Hospedagem InProcess
Neste artigo vamos entender o modelo de hospedagem InProcess da ASP .NET Core. |
|
Depois de concluir o desenvolvimento da sua aplicação ASP.NET Core, você tem que implantá-la em um servidor para que os usuários possam acessar a sua aplicação. Na implantação no IIS, a ASP.NET Core oferece dois modelos de hospedagem: InProcess e OutOfProcess.
Ao implantar sua aplicação Web no IIS, várias requisições feitas ao seu aplicativo são tratadas pelo ASP.NET Core Module (Módulo Principal da ASP.NET Core). Por padrão o modelo de hospedagem definido para sua aplicação é o modelo InProcess.
Isso significa que a ASP.NET Core Module encaminha as requisições ao IIS HTTP Server (IISHttpServer). O servidor HTTP do IIS é um servidor executado em processo com o IIS. Isso resulta em ótimo desempenho em comparação com o modelo OutProcess, pois o modelo InProcess ignora o IIS e usa o servidor Kestrel interno da ASP.NET Core.
Você pode definir o modelo de hospedagem definindo no seu arquivo de projeto a tag a seguir:
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
Quando um aplicativo principal do ASP.NET é executado, o runtime do .NET procura o método Main(), que é o ponto de entrada para o aplicativo. O método Main() chama o método estático CreateHostBuilder() que chama o método CreateDefaultBuilder.
No caso de
hospedagem InProcess, o método
CreateDefaultBuilder() chama o método
UseIIS() e hospeda o aplicativo dentro do processo
de trabalho do IIS (w3wp.exe ou iisexpress.exe).
Nota: Do ponto de vista do desempenho, a hospedagem InProcess oferece
uma taxa de transferência de requisições significativamente maior que a
hospedagem OutOfProcess.
No caso do
IIS, o nome do processo que executa o aplicativo é w3wp
e, no caso do IIS Express, é iisexpress. Para obter
o nome do processo executando o aplicativo, use o seguinte comando:
System.Diagnostics.Process.GetCurrentProcess().ProcessName
Quando executamos o projeto no Visual Studio, ele usa o
IISExpress por padrão. O IIS Express é uma versão leve e independente do
IIS, otimizada para o desenvolvimento de aplicativos. Em produção é usado o IIS.
Quando criamos o projeto web usando a ferramenta de linha de comando NET CLI a aplicação vai usar o servidor Kestrel como servidor da web.
O Kestrel é um servidor Web multiplataforma para o ASP.NET Core. É suportado em todas as plataformas e versões suportadas pelo .NET Core. Ele está incluído por padrão como servidor interno no ASP.NET Core.
O Kestrel pode
ser usado, por si só, como um servidor de borda, ou seja, um servidor da Web
voltado para a Internet que pode processar diretamente as solicitações HTTP
recebidas do cliente. No Kestrel, o processo usado para hospedar o aplicativo é
o dotnet.exe.
Para configurar no seu projeto o modelo de hospedagem para
InProcess declare a tag AspNetCoreHostingModel
conforme abaixo:
Após criar o seu projeto clique no menu Build> Publish e implante faça o Web Deploy (ou copie manualmente para o IIS) no IIS.
Depois de concluir a implantação do aplicativo, localize o arquivo web.config gerado durante o processo de implantação. Neste web.config você encontrará uma seção como esta:
<?xml version="1.0"
encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\TesteApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" /> </system.webServer> </location> </configuration> |
Observe que aqui definimos hostingModel como InProcess.
Agora, execute o aplicativo no navegador com essa configuração padrão e observe os Headers HTTP. Você poderá identificar qual o processo esta sendo executado, no caso o IIS, e deverá obter algo parecido com o mostrado na figura abaixo:
Se você alterar o modelo para OutProcess vai ver que o valor exibido no Header Http será : servidor Kestrel.
E estamos conversados...
"(Disse
Jesus)Passará o céu e a terra, mas as minhas palavras não hão de passar."
Lucas 21:33
Referências:
Jose C Macoratti (@macorati) | TwitterSeção Entity Framework - Macoratti .NET
ASP .NET Core - Implementando a segurança com ... - Macoratti
ASP.NET Core MVC - Criando um Dashboard ... - Macoratti.net
Entity Framework - Separando as classes das entidades do EDM(.edmx) em projetos distintos
ASP .NET Core - Apresentando Razor Pages - Macoratti
ASP .NET Core MVC - CRUD básico com ADO .NET - Macoratti
ASP .NET Core - Implementando e consumindo JWT - Macoratti
ASP .NET Core - Criando uma API CRUD - I - Macoratti.net
ASP .NET Core - Criando sua primeira Web API ... - Macoratti