Costruire una chat per Silverlight con il PollingDuplexHttpBinding

6 pagine in totale: <<Indietro 1 2 3 [4] 5 6 Avanti >>

Hosting del servizio

Terminato il servizio questo va ospitato nei vari modi offerti da WCF: servizio windows, console application, svc in un'applicazione ASP.NET. Purtroppo ciò che il team di Silverlight fornisce è l'implementazione minima di binding e non è perciò possibile configurare il tutto da config, ma occorre istanziarlo manualmente. In questo articolo si sceglie la strada più comune e più facile da distribuire: il file .svc, perciò è necessario prima di tutto referenziare l'assembly System.ServiceModel.PollingDuplex che è possibile trovare nella cartella %Program Files%\Microsoft SDKs\Silverlight\v2.0\Libraries\Server\ una volta installato lo SDK di Silverlight.

Si provvede poi a creare un file ChatService.svc con la direttiva che va ad indicare il servizio da instanziare e in più il factory, cioè il componente che crea l'ambiente di hosting per tale servizio.

<%@ ServiceHost Language="C#"  
  Service="WinFXItalia.com.Silverlight.Chat.Web.ChatService" 
  Factory="WinFXItalia.com.Silverlight.Chat.Web.PollingDuplexHostFactory" %>

A questo punto si crea la classe PollingDuplexHostFactory, la quale deve ereditare da ServiceHostFactory, e re implementare CreateServiceHost. Questo metodo viene chiamato per ogni tipo di servizio per avere il ServiceHost specifico; in questo caso si restituisce un proprio tipo.

public class PollingDuplexHostFactory : ServiceHostFactory 
{ 
 
  protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
  { 
    // Creo l'host personalizzato solo per il servizio di Chat 
    if (serviceType == typeof(ChatService)) 
      return new ChatPollingDuplexHost(baseAddresses); 
 
    return base.CreateServiceHost(serviceType, baseAddresses); 
  } 
 
}

La classe ChatPollingDuplexHost implementa un ServiceHost che diversamente dal comportamento classico, non legge dal config le impostazioni di binding, behaviors ecc, ma bensì imposta manualmente questi aspetti. Si impostano quindi il binding, l'encoding testuale compatibile SOAP 1.1 e il trasporto HTTP.

public class ChatPollingDuplexHost : ServiceHost 
{ 
  public ChatPollingDuplexHost(Uri[] baseAddresse) 
  { 
    // Carica dal config eventuali impostazioni del servizio 
    base.InitializeDescription(typeof(ChatService), new UriSchemeKeyedCollection(baseAddresse)); 
  } 
 
  protected override void InitializeRuntime() 
  { 
    // Creo il binding di polling 
    PollingDuplexBindingElement pdbe = new PollingDuplexBindingElement() 
    { 
      // Tempo di attesa per il client 
      ServerPollTimeout = TimeSpan.FromSeconds(5), 
      // Se la session non riceve o non manda niente, scade 
      InactivityTimeout = TimeSpan.FromMinutes(15), 
    }; 
 
    this.AddServiceEndpoint( 
       typeof(IChatService), 
       new CustomBinding( 
         pdbe, 
         new TextMessageEncodingBindingElement( 
           MessageVersion.Soap11, 
           System.Text.Encoding.UTF8), 
         new HttpTransportBindingElement()), 
         ""); 
 
    base.InitializeRuntime(); 
  } 
} 

6 pagine in totale: <<Indietro 1 2 3 [4] 5 6 Avanti >>

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti

Per inserire un commento, devi avere un account.

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



Segnala su: Facebook MSDN Social Twitter Segnalo Wikio Diggita Technorati Stumbleupon Google Yahoo FriendFeed Delicious Furl

TUTORIALS
TOP TEN ARTICOLI
ARTICOLI VIA E-EMAIL

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

MEDIA
IN EVIDENZA
MISC