Specificare il binding da utilizzare in IIS per i servizi in WCF

di , in Windows Communication Foundation,

I servizi sviluppati con Windows Communication Foundation possono essere ospitati da qualsiasi tipo di applicazione e fra queste anche su Internet Information Services (IIS). Questo è possibile mendiante i file con estensione .svc che permette di mettere in ascolto il servizio con binding di tipo basicHttpBinding, wsHttpBinding e webHttpBinding (utilizzato per servizi REST e Data Services).

Poiché IIS è in grado di esporre un sito su più schema (HTTP, HTTPS, ecc) e su più indirizzi con più domini o porte, mentre in WCF occorre specificare per ogni endPoint uno specifico indirizzo e schema, spesso si incappa nel seguente errore: This collection already contains an address with scheme HTTP wcf.

Questo avviene perché IIS passa l'informazione di hosting al servizio WCF che automaticamente deduce qual è indirizzo completo del svc, ma nel caso ci siano più possibilità occorre indicarlo specificatamente. Dal .NET Framework 3.5 SP1 una nuova sezione di configurazione di serviceHostingEnvironment permette di ovviare a questo problema:

<system.serviceModel>
  <serviceHostingEnvironment>
    <baseAddressPrefixFilters>
      <add prefix="http://services.aspitalia.com"/>
    </baseAddressPrefixFilters>
  </serviceHostingEnvironment>
</system.serviceModel>

Nello script precedente, per esempio, si forza di dover ascoltare su http per uno specifico dominio. Nelle versioni precedenti al service pack, invece, è necessario creare un ServiceHostFactory personalizzato che sovrascriva CreateServiceHost per istanziare il servizio e passare manualmente l'uri base.

public class MyFactory : ServiceHostFactory
{
  public override ServiceHost CreateServiceHost(Type t, Uri[] baseAddresses )
  {
    return new ServiceHost(t, new Uri("http://services.aspitalia.com"))
  }
}

Il factory va poi specificato nel file .svc con l'attributo Factory della direttiva ServiceHost.

<%@ ServiceHost Factory="MyFactory" Service="MyService" %>

Commenti

Visualizza/aggiungi commenti

Specificare il binding da utilizzare in IIS per i servizi in WCF (#86)
| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi