18 messaggi dal 06 settembre 2002
Ho effettuato una prova (purtroppo senza successo) per l'hosting di un'applicazione ASP.NET Core in IIS.

Questo e' l'ambiente che ho utilizzato:

Client: PC con Windows 10, Visual Studio 2017 (versione 15.8.5) e .NET Core 2.1.402
Server: Windows Server 2016 virtualizzato con VMWare Workstation

Per fare le prove ho utilizzato l'applicazione generata da Visual Studio 2017 (senza alcuna modifica): Applicazione Web ASP.NET Core / Applicazione Web (Razor Pages) senza autenticazione.

Riassumo tutti i passi che ho effettuato.

Lato client:

1. ho creato la soluzione assegnando il nome MyFirstWebApp

2. ho compilato e testato l'applicazione con successo con Visual Studio nel PC client

3. ho quindi effettuato il publish dell'applicazione nella cartella del client c:\MyFirstWebApp


Lato server (e' gia' attivo IIS con indirizzo IPv4 192.168.83.137):

1. ho installato Windows Server Hosting Bundle: dotnet-hosting-2.1.4-win.exe

2. ho riavviato il server

3. ho copiato il contenuto della cartella del Client c:\MyFirstWebApp nella cartella del server c:\inetpub\wwwroot\MyFirstWebApp

4. ho creato, seguendo le indicazioni del vostro libro, il pool di applicazioni NetCoreAppPool con l'opzione "Versione .NET CLR": "Nessun codice gestito"

5. ho aggiunto il sito MyFirstWebApp con i seguenti parametri:
Nome sito: MyFirstWebApp
Pool di applicazioni: NetCoreAppPool
Percorso fisico: c:\inetpub\wwwroot\MyFirstWebApp
Binding porta: 5000

6. ho aperto il browser del server inserendo l'url: http:\\localhost:5000 e l'applicazione e' partita senza problemi


Lato Client:

1. ho aperto il browser (Chrome) e ho inserito questo url: http:\\192.168.83.137 per testare IIS che mi ha risposto con la pagina di default di IIS

2. ho inserito l'url che dovrebbe avviare l'applicazione ASP.NET Core: http:\\192.168.83.137:5000 ma ottengo questo errore:

Impossibile raggiungere il sito
192.168.83.137 ha impiegato troppo tempo a rispondere.
Cerca 192.168.83.137 5000 con Google
ERR_CONNECTION_TIMED_OUT


Qualche suggerimento? Ho saltato qualche passaggio? Servono ulteriori informazioni?

Grazie per la disponibilita'
Salvo
11.097 messaggi dal 09 febbraio 2002
Contributi
Ciao Salvo,
credo che tu abbia fatto tutto giusto, devi semplicemente aprire la porta 5000 nel firewall di Windows Server 2016 in modo che possa ricevere il traffico proveniente dalla rete LAN.

Nome sito: MyFirstWebApp
Pool di applicazioni: NetCoreAppPool
Percorso fisico: c:\inetpub\wwwroot\MyFirstWebApp
Binding porta: 5000

E come indirizzo IP cosa hai messo? Hai lasciato su "Tutti non assegnati"? E il Nome Host invece?

ciao,
Moreno

Enjoy learning and just keep making
18 messaggi dal 06 settembre 2002
Ciao Moreno anche questa volta hai trovato la soluzione!!!

Questi sono gli altri parametri che ho inserito nella creazione del sito:

Binding:
Tipo: http
Indirizzo IP: Tutti non assegnati
Porta: 5000

Nome host: vuoto

Comunque hai azzeccato il problema: era proprio il Firewall che bloccava la porta 5000!!

Sono riuscito ad aprire la porta 5000 in entrata e l'applicazione e' partita immediatamente!!

Grazie
salvo
11.097 messaggi dal 09 febbraio 2002
Contributi
Ottimo Salvo!
Giusto per completezza: non sei obbligato a tenere l'applicazione sulla porta 5000 come durante lo sviluppo. Ad esempio puoi esporla sulla porta 80 e usare come nome host qualcosa tipo nomeapp.nomemacchina. A livello di DNS dovrai fare in modo che quel nome si risolva con l'ip del server. A questo punto i tuoi utenti potranno accedervi digitando http://nomeapp.nomemacchina/ nella barra degli indirizzi del browser.

ciao,
Moreno

Enjoy learning and just keep making
18 messaggi dal 06 settembre 2002
Adesso ho una domanda da farti riguardo al server.

Premetto che essendo uno sviluppatore le mie conoscenze sistemistiche sono di primo livello!!

Allora ci troviamo nella condizione in cui la mia applicazione ASP.NET Core sta girando senza problemi!

Utilizzando le impostazione di default la configurazione in esecuzione dovrebbe coincidere allo schema rappresentato nella figura 3.5 del tuo libro a pag 43.

Ossia IIS come Reverse proxy e Kestrel come web server.

Detto questo e' possibile verificare che effettivamente sia questa la situazione?

Nel server ci sono tracce di Kestrel?

Si puo' trovare qualcosa guardando tra i servizi? si deve guardare nella log?

Grazie
salvo
11.097 messaggi dal 09 febbraio 2002
Contributi
Ciao Salvo,
Kestrel non viene installato nel sistema come IIS.
Kestrel è un web server scritto completamente con codice managed e risiede su una serie di assembly .dll come Microsoft.AspNetCore.Server.Kestrel.dll che troverai nella directory d'installazione del .NET Core. Non ci sono riferimenti ad esso né nel registro di Windows né tra i servizi. Kestrel va in esecuzione solo quando l'applicazione viene avviata col comando dotnet run o avviata da IIS grazie all'ASP.NET Core Module. Kestrel gira in-process all'applicazione, cioè non vedrai mai un processo Kestrel.exe in esecuzione.

Kestrel non è l'unico webserver con cui ASP.NET Core può funzionare. Leggi questa comparativa con http.sys.
http://www.aspitalia.com/script/1278/Scegliere-Kestrel-HTTP.sys-Webserver-ASP.NET-Core.aspx

ciao,
Moreno

Enjoy learning and just keep making
18 messaggi dal 06 settembre 2002
Ciao Moreno ho bisogno di un chiarimento.

Quindi siamo al punto di aver pubblicato l'applicazioni in IIS, ma avendo utilizzato le impostazioni di default, non ho aggiunto nel metodo BuildWebHost() UseIISIntegration().

In questo caso qual'e' la situazione? Sotto IIS gira Kestrel come web server?

A pag 42 del tuo libro leggo: "Microsoft consiglia che (Kestrel) sia posto in ascolto solo sull'interfaccia di loopback (localhost).

Significa che e' consigliabile (=OBBLIGATORIO) aggiungere sempre UseIISIntegration() quando si pubblica su IIS?

Grazie
salvo
11.097 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Significa che e' consigliabile (=OBBLIGATORIO) aggiungere sempre UseIISIntegration() quando si pubblica su IIS?

Non è obbligatorio, infatti la tua applicazione sta funzionando anche senza UseIISIntegration(). E' consigliabile perché così Kestrel riesce a conoscere qualcosa in più da IIS, tipo l'host e la porta in cui è ospitato il sito, e fare alcune cose tipo catturare gli errori in fase di startup.
Comunque puoi capire tu stesso cosa fa guardando il codice sorgente.
https://github.com/aspnet/IISIntegration/blob/b5ff991eb95c71915aff1eb6283388dc02e9c67e/src/Microsoft.AspNetCore.Server.IISIntegration/WebHostBuilderIISExtensions.cs#L30


In questo caso qual'e' la situazione? Sotto IIS gira Kestrel come web server?

Con UseIISIntegration o no, ci sono sempre due processi in esecuzione: IIS (w3wp.exe) e l'applicazione ASP.NET Core che al suo interno ha Kestrel che gli consente di ricevere richieste http (dotnet.exe).

Da ASP.NET Core 2.2 probabilmente l'applicazione ASP.NET Core potrà girare in-process ad IIS.
https://github.com/aspnet/Announcements/issues/302

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.