ASP .NET Core - Fazendo a hospedagem no Http.Sys
Neste artigo vamos discutir como hospedar uma aplicação ASP .NET Core Web API usando o HTTP.Sys. |
O HTTP.sys é um servidor Web para ASP.NET Core executado apenas no Windows. O HTTP.sys é uma alternativa ao servidor Kestrel e oferece alguns recursos não disponibilizados pelo Kestrel.
O HTTP.sys dá suporte aos seguintes recursos:
Versões do Windows compatíveis:
O HTTP.sys é útil nas implantações em que:
Assim, o HTTP.sys é uma tecnologia madura que protege contra vários tipos de ataques e proporciona as propriedades de robustez, segurança e escalabilidade de um servidor Web completo. O próprio IIS é executado como um ouvinte HTTP sobre o HTTP.sys.
1 - Com a ASP .NET Core 2.1 ou posterior, ou, se você estiver usando o metapacote Microsoft.AspNetCore.App basta referenciar o pacote Microsoft.AspNetCore.Server.HttpSys no seu código.
2- Depois invoque o método de extensão UseHttpSys ao compilar o Web Host especificando as opções definidas em HttpSysOptions necessárias.
Obs: Na ASP .NET Core 2.0 temos que incluir o pacote Nuget Microsoft.AspNetCore.Server.HttpSys no projeto.
As principais opções disponíveis são:
Propriedade | Descrição | Padrão |
AllowSynchronousIO | Controlar quando a Entrada/Saída síncrona deve ser permitida para HttpContext.Request.Body e HttpContext.Response.Body. | true |
Authentication.AllowAnonymous | Permitir solicitações anônimas. | true |
Authentication.Schemes | Especificar os esquemas de autenticação permitidos. É possível modificar a qualquer momento antes de descartar o ouvinte. Os valores são fornecidos pela enumeração AuthenticationSchemes: Basic, Kerberos, Negotiate, None e NTLM. | None |
EnableResponseCaching | Tentativa de cache do modo kernel para obtenção de respostas com cabeçalhos qualificados. A resposta pode não incluir Set-Cookie, Vary ou cabeçalhos Pragma. Ela deve incluir um cabeçalho Cache-Control que seja public e um valor shared-max-age ou max-age, ou um cabeçalho Expires. | true |
MaxAccepts | O número máximo de aceitações simultâneas. |
5 ×
Ambiente. ProcessorCount |
MaxConnections | O número máximo de conexões simultâneas a serem aceitas. Use -1 como infinito. Use null a fim de usar a configuração que abranja toda máquina do registro. |
null (ilimitado) |
RequestQueueLimit | O número máximo de solicitações que podem ser colocadas na fila. | 1000 |
ThrowWriteExceptions | Indica se as gravações do corpo da resposta que falham quando o cliente se desconecta devem gerar exceções ou serem concluídas normalmente. |
false (concluir normalmente) |
A título de exemplo vamos criar uma aplicação ASP .NET Core usando o template API usando o VS 2017 Community com o nome WebAPI_Http.Sys.
Essa WebAPI vai criar um controlador ValuesControllers que iremos usar. Para efeito de teste vamos alterar os métodos HttpGet Get e Get(int id) conforme abaixo:
....
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "Banana", "Laranja","Maça", "Manga", "Pera", "Abacate" };
}
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
return "Melancia";
}
....
|
A seguir abra o arquivo Program do projeto e altere o código conforme abaixo:
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Server.HttpSys;
using System;
namespace WebAPI_Http.sys
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(" #### Executando a WEb API com HTTP.sys ####\n");
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseHttpSys(options =>
{
options.Authentication.Schemes = AuthenticationSchemes.None;
options.Authentication.AllowAnonymous = true;
options.MaxConnections = null;
options.MaxRequestBodySize = 30000000;
options.UrlPrefixes.Add("http://localhost:7000");
});
}
}
|
Acima estamos usando o método UseHttpSys e definindo algumas opções como : permitir o acesso anônimo, e tamanho das requisições e a porta onde a aplicação vai atender.
Para testar no visual studio, certifique-se de não executar a aplicação no perfil do IIS-Express/IIS mas selecione o perfil como a aplicação WebAPI_Http.Sys :
Executando o projeto com essas configurações iremos obter o seguinte resultado no console:
Abrindo um navegador e acessando http://localhost:7000/api/values iremos obter o seguinte resultado:
Nota: Para a ASP .NET Core 2.0 o código do arquivo Program ficaria assim:
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Server.HttpSys;
using System;
namespace WebAPI_Http.sys
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(" #### Executando a WEb API com HTTP.sys ####\n");
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseHttpSys(options =>
{
options.Authentication.Schemes = AuthenticationSchemes.NTLM;
options.Authentication.AllowAnonymous = true;
options.MaxConnections = 100;
options.MaxRequestBodySize = 30000000;
options.UrlPrefixes.Add("http://localhost:7000");
})
.Build();
}
}
|
Pegue o projeto completo aqui: WebAPI_Http.sys.zip
Salmos 18:2
Referências: