Tutorial – Como hospedar uma webapp .NET Core no IIS

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.

server_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! 😉

Advertisement

2 thoughts on “Tutorial – Como hospedar uma webapp .NET Core no IIS

Add yours

  1. 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”;

        public static string PublicationsEndpoint = $"{BaseUrl}/publications";
        public static string MediaEndpoint = $"{BaseUrl}/media";
    
        public static string AuthorsEndpoint = $"{BaseUrl}/authors";
        public static string CategoriesEndpoint = $"{BaseUrl}/categories";
        public static string PublishersEndpoint = $"{BaseUrl}/publishers";
        public static string PublicationsFormatsEndpoint = $"{BaseUrl}/formatospublicacoes";
        public static string MediaFormatsEndpoint = $"{BaseUrl}/formatosmedia";
        public static string StoragePlacesEndpoint = $"{BaseUrl}/storagelocations";
    
        public static string DashboardEndpoint = $"{BaseUrl}/dashboard";
        public static string PdfEndpoint = $"{BaseUrl}/pdf";
        public static string MostUsedEndpoint = $"{BaseUrl}/mostused";
    }
    

    }

    “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;

        public AutorService(HttpClient httpClient, IMapper mapper, ILogger<AutorService> logger)
        {
            _httpClient = httpClient;
            _mapper = mapper;
            _logger = logger;
        }
    
        public async Task<IEnumerable<AutorDTO>> GetAllAsync()
        {
            _logger.LogInformation("Lendo todos os Autores do API");
            try
            {
                var _AuthorsDTO = await _httpClient
                    .GetFromJsonAsync<IEnumerable<AutorDTO>>($"{_Uri}/GetAuthors");
                return _AuthorsDTO;
            }
    

    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

    Gostar

Deixe um comentário

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Create a website or blog at WordPress.com

EM CIMA ↑

%d bloggers gostam disto: