La WAS in IIS7

Con l’uscita di Windows Vista e Windows Server 2008 è stata introdotta la WAS (Windows Activation Service), che permette di “hostare” su IIS (Internet Information Services) servizi WCF anche per protocolli differenti dal tradizionale SOAP (basicHttpBinding e HttpBinding).
Precedentemente a queste versioni di sistema operativo era necessario realizzare un servizio Windows che “hostasse” il servizio WCF, complicando così tutta la procedura di deploy.
IIS7, con la WAS, abbatte totalmente i problemi legati al rilascio e manutenzione dei servizi in quanto è sufficiente copiare la singola assembly del servizio all’interno del nostro sito web o modificare la sua configurazione e sarà lui ad occuparsi di tutto il resto.

Sia in Windows Vista che in Windows Server 2008 la WAS non è presente di default: va quindi installata a mano nell’apposita sezione “Programs and Features”, come mostrato dagli screenshots seguenti:

8-1-2009 3-29-19 PM 8-1-2009 3-31-56 PM 8-1-2009 3-33-15 PM

Una volta completata la procedura di installazione verrà automaticamente configurato il DefaultSite per supportare i protocolli non-http, quindi NET.TCP, NET.PIPE e NET.MSMQ.

A dimostrazione di quanto appena detto, se si prova ad editare a mano il file XML contenente la configurazione di IIS7 (%windir%\System32\inetsrv\config\applicationHost.config) e si controlla l’apposita area del Default Site, si dovrebbe avere una configurazione come la seguente:

<site name="Default Web Site" id="1" serverAutoStart="true">
    <application path="/WCFService" applicationPool="DefaultAppPool" enabledProtocols="http,net.tcp,net.pipe,net.msmq">
        <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot\WCFService" />     
    </application>

    <bindings>
        <binding protocol="https" bindingInformation="*:443:" />
        <binding protocol="http" bindingInformation="*:80:" />
        <binding protocol="net.pipe" bindingInformation="*" />
        <binding protocol="net.msmq" bindingInformation="localhost" />
        <binding protocol="net.tcp" bindingInformation="808:*" />
    </bindings>
</site> 

Nel caso la configurazione non coincida con quella appena mostrata, è possibile eseguire manualmente il comando di configurazione ed abilitazione per i nostri siti web.
Di seguito potete trovare l’elenco dei comandi disponibile per i protocolli non-HTTP:

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='*']

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='808:*']

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.msmq',bindingInformation='localhost']

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='msmq.formatname"',bindingInformation='localhost']

Una volta completata la configurazione, è necessario abilitare i protocolli per tutte le applicazioni che necessitano di hostare WCF in modalità non-HTTP.
Il comando seguente mostra come fare:

%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/MyVirtual" /enabledProtocols:http,net.pipe, net.tcp, net.msmq

A questo punto da Visual Studio, per aggiungere il servizio net.tcp hostato in IIS basta aggiungere l’indirizzo del file .svc presente nel web server ed il gioco è fatto, come mostrato di seguito:

8-3-2009 9-12-37 PM

Anche se si specifica un indirizzo http, questo non vuol dire che il servizio viene esposto in http o il proxy punta ad un binding http, ma sarà direttamente IIS a comunicare al client il protocollo utilizzato.


Comments