mercoledì, giugno 06, 2007

Port Sharing su WCF

In WCF è possibile condividere l'uso di una determinata porta TCP tra più servizi diversi, grazie al Port Sharing.

Questo servizio, denominato Net.Tcp Port Sharing Service è installato con il framework 3.0 ma di default l'avvio è manuale e l'account utente predefinito è LocalSystem. Dopo averlo avviato ed impostato l'avvio in automatico, si può procedere a configurare il resto.

Visto che il servizio Windows (o application pool di IIS) che ospita il nostro/vostro servizio WCF utilizza un account utente che non ha privilegi amministrativi, è necessario abilitare questo account all'accesso tramite Port Sharing.
Per questo è necessario ottenere il SID dell'account utente (ho usato il tool user2sid.exe) ed aggiungerlo alla configurazione del servizio Net.Tcp Port Sharing Service, il file SmSvcHost.exe.config che si trova nella cartella di sistema di WCF, qualcosa come  C:\windows\Microsoft.Net\v3.0\Windows Communication Foundation.
Attenzione!!! Se, come nel mio caso, il sistema operativo è a 64 bit e, di conseguenza, anche .Net 3.0 è a 64 bit, esiste un'altra cartella, del tipo C:\WINDOWS\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation, dove si trova il servizio ed il file di configurazione che entrano in gioco.
Qui trovate le istruzioni per configurare il servizio Net.Tcp Port Sharing Service. Da tenere a mente che le configurazioni relative al canale Tcp presenti in questo file di configurazione hanno il sopravvento su quanto specificato nel file di configurazione del nostro servizio.

Una volta attivato il Net.Tcp Port Sharing Service e consentito l'accesso al nostro account, si può configurare il nostro servizio WCF perchè utilizzi la condivisione della porta. Per fare questo è sufficiente abilitare l'attributo portSharingEnabled della binding configuration:

<netTcpBinding>
<binding name="aTcpBindingName" portSharingEnabled="true">
</binding>
</netTcpBinding>

A questo punto tutto è a posto.

Nessun commento: