Deploy di servizi WCF su IIS

Da molte parti per il Web si legge che il deploy di servizi WCF su IIS si riduce ad un copia incolla di alcuni file, più un paio di modifiche banali da apportare al file di configurazione. Per la mia diretta esperienza posso confermare solo in parte: solo in parte perchè un prerequisito forte è che l'ambiente di deploy sia già perfettamente configurato.

Cercherò quindi di spiegare passo a passo tutto ciò che ho dovuto fare partendo "dal pulito" per pubblicare i servizi WCF su un Windows Server 2003 (IIS 6), in modo di avere una procedura da seguire senza dover raccattare i vari pezzi in giro per internet.

La macchina di partenza è una installazione di Windows 2003 Server con Service Pack 2.

La prima operazione è stata l'installazione del Framework .NET 3.5 SP1. N.B. questa versione del framework è dovuta ad altre necessità; per il fine della sola pubblicazione di servizi WCF è sufficiente la versione 3.0.

Successivamente ho attivato il role Application Server dalla finestra di gestione del server; l'attivazione di questo role installa IIS 6 sulla macchina ed attiva altri servizi (e.g. MSDTC); è importante ricordarsi di selezionare anche l'attivazione di ASP.NET e le Front Page Server Extensions in fase di attivazione del role. Le Front Page Server Extensions non sono strettamente necessarie, ma ci permettono di eseguire il Deploy da Visual Studio, anziché copiare i file a mano.

N.B. l'installazione del Framework è stata eseguita volutamente prima di attivare IIS. Questo per alcuni problemi di compatibilità tra le varie versioni pre-RTM del Framework 3.0 e il deploy su IIS 6 dei servizi WCF, che sfociano in un fastidiosissimo errore 404 quando si prova ad accedere al servizio. Il framework più aggiornato può essere installato anche successivamente all'attivazione di IIS ma in questo caso è bene prestare attenzione a questo post, che spiega abbastanza bene come comportarsi per risolvere eventuali problemi.

Ora si devono attivare le Web Service Extensions per ASP.NET 2. All'interno di IIS Manager sotto il nodo del server (il nodo col nome del server per intenderci) si trovano le Web Service Extensions: se al loro interno si trova già la voce ASP.NET v2.0.50727 è sufficiente attivarla (tasto destro --> Allow); se la voce non è presente sarà necessario aggiungerla. Per fare ciò cliccare col tasto destro sul nodo Web Service Extensions e selezionare la voce "Add a new Web Service Extensions"; indicate la dll "C:\Windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll" e selezionate il check che ve la abilita in automatico; battezzatela ASP.NET v2.0.50727 giusto per chiarezza.

Dopodiché è necessario aggiungere le autorizzazioni appropriate all'utente Network Service per l'accesso alla cartella dei file temporanei di ASP.NET; per fare ciò vi è una utility a riga di comando all'interno della cartella "C:\Windows\microsoft.net\framework\v2.0.50727": il comando da eseguire è aspnet_regiis -ir.

Ho quindi creato un nuovo Application Pool, senza particolari impostazioni, al quale ho associato il sito web che ho creato appositamente per la mia base di servizi.

Si deve porre attenzione anche alle impostazioni del sito web:

  • Se volete le Front Page Server Extensions dovrete attivarle anche sul singolo sito web: tasto destro sul sito, all'interno del menu All Tasks è presente una voce Configure Server Extensions. Sarà sufficiente seguire il Wizard.
  • La versione di ASP.NET del sito deve essere la ASP.NET v2.0.50727. Non allarmatevi se non trovate ASP.NET 3.0 o simili; come è già stato detto in ogni angolo del Web il core ASP.NET (e più in generale del Framework .NET) rimane la v2.
  • Assicuratevi che le Executing Permission della Applicazione (tab Home Directory nelle proprietà del sito) siano impostate a Scripts Only

A questo punto è sufficiente eseguire il deploy del servizio all'indirizzo assegnato al Sito creato. Verrà generato il "famoso" file .svc, la "famosa" directory bin, al cui interno finiranno le dll, ed il file Web.config.

All'interno del Web.config a parte tutte le vostre impostazioni del caso, fate particolare attenzione ad eventuali host che avete definito nell'applicazione locale. Pubblicando il servizio su IIS non verranno considerati i BaseAddress eventualmente impostati: il base address sarà sempre l'indirizzo del file Svc che rappresenta il servizio.

Un ulteriore tip: se non avete ancora definito la politica di Sicurezza del vostro servizio assicuratevi che la configurazione del Binding dell'EndPoint specifichi un tag Security col mode impostato a None; in caso contrario potreste incappare in un fastidioso errore dovuto al fatto che IIS non riesce ad autenticarvi. N.B. Faccio una considerazione personale: questa configurazione va bene solo in fase di testing del servizio.

Per concludere: la procedura che ho descritto mi ha permesso di pubblicare e far funzionare i miei servizi WCF. Ciò che non ho premesso e che mi sento di dire è che non sono un grande esperto di queste "cose", essendo io alle prime esperienze con applicazioni basate su servizi.

Se qualcuno più preparato di me ha qualcosa da aggiungere, correggere etc etc beh i consigli sono sempre accetti!

 

Matteo

 

Print | posted @ lunedì 1 dicembre 2008 01:59

Comments on this entry:

Gravatar # re: Deploy di servizi WCF su IIS
by geeks at 08/10/2009 17:58

hola,
gracias...
Comments have been closed on this topic.