Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
de David So
Este artigo descreve as etapas necessárias para executar um aplicativo ASP.Net Core com o IIS no Nano.
Compatibilidade
Versão | Observações |
---|---|
IIS 10.0 | Os recursos descritos nesse artigo foram introduzidos no IIS 10.0 |
IIS 8.5 e versões anteriores | Os recursos descritos nesse artigo não tinham suporte antes do IIS 10.0 |
Instalação do IIS
Primeiro você precisa instalar o IIS no Nano. As etapas para fazer isso já estão incluídas na documentação oficial Nano. Para obter mais informações, consulte os seguintes artigos:
Instalação dos Encaminhadores Reversos
No momento, o HttpPlatformHandler e o host Asp.Net Core Kestrel exigem que o pacote de Encaminhadores Reversos seja instalado no computador Nano.
Os Encaminhadores Reversos podem ser instalados offline (computador desligado) ou online (computador em execução).
Offline, os Encaminhadores Reversos podem ser instalados passando os parâmetros –ReverseForwarders
ao chamar o cmdlet New-NanoServerImage. por ex.
New-NanoServerImage -MediaPath f:\ -BasePath .\Base -TargetPath .\Nano1.vhd -GuestDrivers -Packages Microsoft-NanoServer-IIS-Package -ReverseForwarders
Online, os Encaminhadores Reversos podem ser instalados chamando o dism no pacote relevante:
dism /online /add-package /packagepath:c:\packages\Microsoft-OneCore-ReverseForwarders-Package.cab
dism /online /add-package /packagepath:c:\packages\en-us\Microsoft-OneCore-ReverseForwarders-Package.cab
<reboot>
O 1º comando instala o pacote de recursos dos Encaminhadores Reversos.
O 2º comando instala o pacote de idiomas associado do pacote.
Neste caso, C:\packages
é um diretório local que eu criei no qual eu copiei a pasta Pacotes do local de instalação de mídia Nano Server.
Depois de instalar o pacote de Encaminhadores Reversos (offline ou online), verifique se o IIS e os Encaminhadores Reversos estão instalados corretamente executando o dism /online /get-packages
.
Você deve ver os pacotes de Recursos e Idiomas para Microsoft-NanoServer-IIS-Package e Microsoft-OneCore-ReverseForwarders-Package.
Instalação do HttpPlatformHandler
No momento, a instalação do HttpPlatformHandler no Nano é manual.
É compreensível que isso seja um problema... portanto, é algo em que estamos trabalhando para melhorar.
O Nano tem apenas 64 bits (sem WOW), então você precisará instalar a versão x64 mais recente do HttpPlatformHandler (https://www.iis.net/downloads/microsoft/httpplatformhandler) em um computador normal (não Nano).
Quando você tiver a versão x64 bit do HttpPlatformHandler instalada no seu computador normal (não Nano), precisaremos copiar dois arquivos no computador Nano:
%windir%\System32\inetsrv\httpPlatformHandler.dll
%windir%\System32\inetsrv\config\schema\httpplatform_schema.xml
No computador Nano, você precisará copiar esses dois arquivos para os respectivos locais (dll->inetsrv, schema file->inetsrv\config\schema)
copy .\httpPlatformHandler.dll c:\Windows\System32\inetsrv
copy .\httpplatform_schema.xml c:\Windows\System32\inetsrv\config\schema
Como habilitar o HttpPlatformHandler (PowerShell)
Você pode executar as etapas abaixo em uma sessão remota do PowerShell para o computador Nano.
Observe que as etapas abaixo funcionam em um sistema limpo, mas não devem ser idempotentes. Se você fizer isso várias vezes, várias entradas serão adicionadas e você terá problemas. Se você acabar em um estado invalido, poderá encontrar os backups do arquivo applicationHost.config em %systemdrive%\inetpub\history
.
Import-Module IISAdministration
$sm = Get-IISServerManager
# Add AppSettings section (for Asp.Net Core)
$sm.GetApplicationHostConfiguration().RootSectionGroup.Sections.Add("appSettings")
# Unlock handlers section
$appHostconfig = $sm.GetApplicationHostConfiguration()
$section = $appHostconfig.GetSection("system.webServer/handlers")
$section.OverrideMode="Allow"
# Add httpPlatform section to system.webServer
$sectionHttpPlatform = $appHostConfig.RootSectionGroup.SectionGroups["system.webServer"].Sections.Add("httpPlatform")
$sectionHttpPlatform.OverrideModeDefault = "Allow"
# Add to globalModules
$globalModules = Get-IISConfigSection "system.webServer/globalModules" | Get-IISConfigCollection
New-IISConfigCollectionElement $globalModules -ConfigAttribute @{"name"="httpPlatformHandler";"image"="%SystemRoot%\system32\inetsrv\httpPlatformHandler.dll"}
# Add to modules
$modules = Get-IISConfigSection "system.webServer/modules" | Get-IISConfigCollection
New-IISConfigCollectionElement $modules -ConfigAttribute @{"name"="httpPlatformHandler"}
$sm.CommitChanges()
Como habilitar o HttpPlatformHandler (editando manualmente o applicationHost.config)
Você pode ignorar esta seção se já tiver executado as etapas do PowerShell acima.
Recomendo seguir as etapas do PowerShell, no entanto, se você realmente precisar editar o arquivo applicationHost.config do IIS para habilitar o HttpPlatformHandler, siga essas etapas.
Abra o c:\windows\system32\inetsrv\applicationHost.config
(se você estiver usando o Powershell ISE v5, poderá fazer isso com o psedit c:\windows\system32\inetsrv\applicationHost.config
)
Em <configSections>
adicionar
<configSections>
<section name="appSettings" />
Na seção system.webServer, desbloqueie os manipuladores, alterando de Negar para Permitir
<section name="handlers" overrideModeDefault="Allow" />
Na seção system.webServer, adicione a nova seção httpPlatform
<section name="httpPlatform" overrideModeDefault="Allow" />
</sectionGroup>
Adicione o seguinte ao globalModules
<add name="httpPlatformHandler" image="%SystemRoot%\system32\inetsrv\httpPlatformHandler.dll" />
</globalModules>
Adicione o seguinte aos Módulos
<add name="httpPlatformHandler" />
</modules>
Instalação do aplicativo do ASP.NET Core
Primeiro, verifique se o aplicativo do Asp.Net Core foi criado visando o coreclr and x64
.
Isso é muito importante, pois qualquer outra combinação não funcionará no Nano.
Depois de compilar para coreclr/x64, você precisará copiar todo o aplicativo no computador Nano – neste exemplo, estou usando o c:\HelloAspNetCore
.
Em seguida, vou configurar um novo Site apontando que o c:\HelloAspNetCore\wwwroot
use a porta 8000 (para simplificar, vamos usar o Pool de Aplicativos Padrão)
Não há problemas ao executar o site do Asp.Net Core na porta padrão 80, embora em um ambiente de teste eu goste de separar o aplicativo do Asp.Net Core do site padrão, para que seja mais fácil solucionar problemas quando algo der errado (por exemplo, para que você possa verificar se o site padrão do IIS ainda funciona corretamente).
Uso do PowerShell do IIS:
Import-module IISAdministration
New-IISSite -Name "AspNetCoreSite" -PhysicalPath c:\HelloAspNetcore\wwwroot -BindingInformation "*:8000:"
Criação manual do site (omita se você já criou usando o PowerShell acima) editando o c:\windows\system32\inetsrv\applicationHost.config
:
<sites>
<site name="Default Web Site" id="1">
<application path="/">
<virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:" />
</bindings>
</site>
<site name="AspNetCoreSite" id="2">
<application path="/">
<virtualDirectory path="/" physicalPath="C:\HelloAspNetCore\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:8000:" />
</bindings>
</site>
… rest of xml…
</sites>
A próxima etapa é abrir a porta 8000 no firewall.
New-NetFirewallRule -Name "AspNetCore" -DisplayName "HTTP on TCP/8000" -Protocol tcp -LocalPort 8000 -Action Allow -Enabled True
Solução de problemas
Em primeiro lugar, verifique se o próprio IIS foi instalado corretamente. http://<ipaddress>
deve abrir a página padrão (página azul do IIS). Caso contrário, algo muito básico não foi configurado corretamente.
Em segundo lugar, verifique se o aplicativo pode ser executado de forma autônoma. Por exemplo: c:\HelloAspNetCore\approot\web.cmd
Em terceiro lugar, verifique se você está vendo os logs criados por HttpPlatformHandler – por exemplo. c:\HelloAspNetCore\logs