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:
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:
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.