Creare servizi WCF per applicazioni Silverlight

di Cristian Civera, in Windows Communication Foundation,

Windows Communication Foundation è una potente tecnologia che permette di realizzare servizi qualunque sia il trasporto di comunicazione (HTTP, TCP, MSMQ, ecc) o il formato del messaggio che transita, aderendo e implementando molte specifiche dei consorzi W3C e OASIS.

WCF può essere quindi usato anche per realizzare servizi che debbano essere consumati da un?applicazione Silverlight, ma occorre prestare attenzione ad alcuni aspetti, per i limiti che il client Silverlight ha. Innanzitutto il binding supportato è, per la versione Silverlight 2.0, il basicHttpBinding poiché non è disponibile nessuna forma di sicurezza del messaggio o di autenticazione del servizio, se non sfruttando il protocollo SSL ed esponendo quindi il servizio su HTTPS invece che HTTP.

Qualora poi si voglia interagire con ASP.NET occorre abilitare la compatibilità così da rendere il servizio WCF partecipe alla normale pipeline di esecuzione di una richiesta.

<system.serviceModel> 
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel>

Va poi indicato su ogni singolo servizio se la compatibilità è supportata o richiesta:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public class MyService : IMyService { 

    public MyOperationResponse MyOperation(MyOperationRequest request){ 
    } 
    
}

Questo permette di sfruttare il sistema di autenticazione, autorizzazione e membership API fornito da ASP.NET per proteggere il servizio e conoscere chi sta effettuando la chiamata. Poiché il client Silverlight sfrutta il medesimo componente delle richieste HTTP del browser stesso, se l'utente è autenticato nelle pagine aspx, lo è anche per una richiesta ad un servizio.

In Visual Studio 2008 SP1 è presente inoltre una nuova voce "Silverlight-enabled WCF service" che crea automaticamente un servizio e le relative voci nel web.config per configurarlo con basicHttpBinding e compatibilità ASP.NET attivata. Ecco un esempio:

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="ServiceBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  <services>
    <service behaviorConfiguration="ServiceBehavior" name="MyService">
      <endpoint address="" binding="basicHttpBinding" contract="IMyService" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

Commenti

Visualizza/aggiungi commenti

| 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