Olá!
Se desenvolveram uma aplicação web em .NET Core irão precisar de a hospedar para que os utilizadores finais a possam usar.
Hoje, vou mostrar como o podem fazer com o IIS.
Tutorial – Como hospedar uma webapp .NET Core no IIS
1. Primeiro que tudo, devemos ter os ficheiros de publicação da webapp criados. Isto pode ser feito usando o comando: dotnet publish -c Release
Todos os ficheiros de projeto e dependências serão guardados na pasta: PastaDoProjeto\bin\Release\net5.0\publish
Notem que o caminho inclui net5.0 porque o é esta a versão que estou a usar. Caso estejam a usar uma outra versão o caminho é diferente, mas deve seguir o mesmo padrão.
Vamos copiar todo o conteúdo desta pasta pois será usado mais tarde no IIS.
2. No servidor devemos já ter o IIS instalado.
Uma aplicação .NET Framework não precisa de nenhum runtime instalado, já que o próprio sistema trata de tudo. No entanto, aplicações .NET Core necessitam de ter o seu próprio runtime instalado.
O próximo passo será visitar o website Download .NET (Linux, macOS, and Windows) (microsoft.com) e descarregar o Hosting Bundle. Na página, vamos escolher Download .NET Core Runtime da versão em que a aplicação está escrita.
Na nova página, vamos clicar em Download Hosting Bundle.
Uma vez realizada a transferência basta copiar o executável para o servidor e executá-lo. A instalação é muito simples…
No final, reiniciem o servidor ou reiniciem o serviço do IIS (W3SVC).
3. Agora, a parte mais fácil: Integração da webapp com o IIS.
Vamos abrir o Gestor de Serviços de Informação Internet (IIS) e adicionar um novo web site fazendo clique direito sobre Sites e selecionando Adicionar Web Site….
Vamos preencher todos os campos:
Nome do site: pode ser qualquer um à escolha
Conjunto aplicacional: será preenchido automaticamente
Caminho físico: será a pasta onde iremos colocar os ficheiros de publicação. Como boa prática, deverá ser: C:\inetpub\NomeDoSite
Enlace (todos os campos): Podem saber mais sobre estes campos aqui. Como é um ambiente de testes, vou apenas indicar o Endereço IP como o do próprio servidor e a porta 80 (lembrem-se de desativar o site padrão do IIS (para não criar conflitos) ou configurar o nome do anfitrião como indicado no link)
No final, vamos clicar em OK.
Agora temos de alterar uma opção que o IIS assume automaticamente e que está incorreta para o caso de aplicações .NET Core. Vamos aceder a Conjuntos Aplicacionais e, no lado direito, fazer duplo clique no que está associado ao web site.
Depois só temos de alterar a Versão do .NET CLR para Sem Código Gerido e fazer OK.
Por fim, só falta adicionar o conteúdo de publicação à pasta. Vamos parar o web site primeiro:
Depois basta aceder à pasta e colar todo o conteúdo. Se for pedida permissão adicional, aceitem.
Resta apenas iniciar o nosso website que parámos anteriormente.
E já está!
Se abrirem o browser e acederem ao endereço IP do servidor irão ver a aplicação a correr! 😀
Terei todo o gosto em responde a qualquer questão. Por favor, coloquem-na na secção dos comentários!
Fiquem bem! 😉
Olá, Marcelo.
Gostei do artigo; sintético e muito bem apresentado.
Tenho um pequeno problema, que me está a dar cabo do juízo (deployment no IIS):
Criar uma web api com .net core 5 / padrão repositório / SqlServer.
Para a consumir, criei uma web app com blazor server, onde criei:
Uma classe estática com os endpoints do controllers
namespace Web.Blazor.Static
{
public static class Endpoints
{
public static string BaseUrl = “https://localhost:44303/api”;
}
“ApiWrappers” para consumir os endpoints do api, como no exemplo abaixo:
public class AutorService : IAutorService
{
private readonly HttpClient _httpClient;
protected IMapper _mapper;
private readonly ILogger _logger;
private readonly string _Uri = Endpoints.AuthorsEndpoint;
…
A app não tem qualquer referência ao projeto Web API.
Testei em desenvolvimento, e corre sem problemas.
launchSettings.json da API:
{
“iisSettings”: {
“windowsAuthentication”: false,
“anonymousAuthentication”: true,
“iisExpress”: {
“applicationUrl”: “http://localhost:64327/”,
“sslPort”: 44303
}
},
“$schema”: “http://json.schemastore.org/launchsettings.json”,
“profiles”: {
“IIS Express”: {
“commandName”: “IISExpress”,
“launchBrowser”: true,
“launchUrl”: “https://localhost:44303”,
“environmentVariables”: {
“ASPNETCORE_ENVIRONMENT”: “Production”
}
},
“MediaOrganizerApp.WebApi”: {
“commandName”: “Project”,
“launchBrowser”: true,
“launchUrl”: “https://localhost:44303/”,
“environmentVariables”: {
“ASPNETCORE_ENVIRONMENT”: “Development”
},
“dotnetRunMessages”: “true”,
“applicationUrl”: “https://localhost:5001;http://localhost:5000”
}
}
}
aunchSettings.json app Blazor:
{
“iisSettings”: {
“windowsAuthentication”: false,
“anonymousAuthentication”: true,
“iisExpress”: {
“applicationUrl”: “http://localhost:18618”,
“sslPort”: 44327
}
},
“profiles”: {
“IIS Express”: {
“commandName”: “IISExpress”,
“launchBrowser”: true,
“environmentVariables”: {
“ASPNETCORE_ENVIRONMENT”: “Development”
}
},
“IISX-Production”: {
“commandName”: “IISExpress”,
“launchBrowser”: true,
“environmentVariables”: {
“ASPNETCORE_ENVIRONMENT”: “Production”
}
},
“Web.Blazor”: {
“commandName”: “Project”,
“dotnetRunMessages”: “true”,
“launchBrowser”: true,
“applicationUrl”: “https://localhost:5001;http://localhost:5000“,
“environmentVariables”: {
“ASPNETCORE_ENVIRONMENT”: “Development”
}
}
}
}
Como é mostrado acima, a aplicação cliente comunica com a API através de “https://localhost:44303/”
Agora parti para o deployment no IIS: publiquei a API e o cliente,
Tentei criar web sites para cada uma das aplicações
Para a API, coloquei na porta o valor 44303; o IIS alertou-me com a seguinte mensagem: “Este enlace já está a ser utilizado. Se continuar, poderá substituir o certificado existente para esta combinação IP:porta ou nome do anfitrião:Porta. Pretende utilizar este enlace mesmo assim?”
Quando fui às definições de SSL (IIS), verifiquei que estavam desativadas. Nas definições dos projetos / Debug, a checkbox “EnableSSL” está marcada para ambos os projetos. O problema poderá passar por aí…
Procedi a mesma forma para a app cliente, colocando na porta um valor que não estava atribuído (9001)
Corri a API no IIS e recebo a mensagem “Não é possível aceder a este site”; idem para a app cliente.
Tentei ser o mais sintético possível, mas sei que me alonguei muito no comentário. As minhas desculpas por isso…
Alguma pista sobre o que possa ter feito mail? Pesquisei a net durante horas, e não encontrei fosse o que fosse que me possa ajudar.
Antecipadamente grato.
Fausto Luís
Portugal
GostarGostar
Boa noite, Fausto,
Antes de mais, peço desculpa pela demora.
O problema parece-me estar relacionado com os bindings (enlaces do IIS).
Quantas são as aplicações a serem executadas no IIS?
GostarGostar