Costruire una chat per Silverlight con il PollingDuplexHttpBinding
di Cristian Civera, in Windows Communication Foundation, 16 giugno 2009
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(); } }
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Pagina 3
- Pagina 4
- Pagina 5
- Pagina 6
Sullo stesso argomento
-
Mostrare le camere di sorveglianza tramite il .NET Micro Framework
-
La piattaforma Microsoft per il cloud computing: Windows Azure
-
Interoperabilità con WCF: invocare servizi da PHP e Flash
-
Le novità di Windows 7 per gli sviluppatori
-
Le problematiche più comuni di un'architettura M-V-VM con WPF
-
Introduzione a .NET RIA Services
-
Architettura Model-View-ViewModel in un'applicazione WPF
-
Condizioni e regole in Windows Workflow Foundation
-
Utilizzare Message Queuing per scalare le applicazioni

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.