Dopo aver parlato degli aspetti della sicurezza nei precedenti due articoli dedicati a Windows Communication Foundation, è arrivato il momento di realizzare una prima vera applicazione sfruttando questa tecnologia. In questo articolo viene spiegato come sviluppare un sistema di chat basandosi su una metodologia client-server che nulla ha a che spartire con la tecnologia Peer-To-Peer che comunque è stata notevolmente semplificata nel suo sviluppo sia dall'introduzione di Vista che di WCF.
Architettura Client/Server
Quando si devono mettere in comunicazione più punti in una rete, la prima soluzione che viene in mente è quella Client/Server, dove un server riceve tutte le richieste di connessione ed i comandi provenienti dai client e si preoccupa di smistarli ai destinatari. Questa soluzione presenta il vantaggio di avere un client che ignora completamente quali siano i metodi di comunicazione con gli altri peer e soprattutto quanti essi siano, preoccupandosi quindi della sola gestione del colloquio con il server. Dal lato opposto, però, il server è costretto ad avere un canale aperto per ogni client e deve preoccuparsi di ricevere e smistare ogni richiesta proveniente da essi ritrovandosi così a gestire una situazione che potrebbe diventare molto gravosa all'aumentare degli utenti. Questa situazione trova una risposta naturale nel meccanismo P2P che non è oggetto del presente articolo.
Definire il Contratto (Contract)
Come al solito, la prima cosa da fare quando si realizza un servizio con WCF è stabilire il contratto che il client ed il server devono rispettare e che vede in un'interfaccia managed il suo naturale protagonista. Parlando di chat, i metodi di colloquio sono principalmente tre: connessione, invio del messaggio e disconnessione.
[ServiceContract(CallbackContract = typeof(IChatCallback), SessionMode = SessionMode.Required)] public interface IChat { [OperationContract(IsOneWay=false, IsInitiating=true, IsTerminating=false)] string[] SignIn(string nick); [OperationContract(IsOneWay=true, IsInitiating=false, IsTerminating=false)] void SendMessage(string nick, string message); [OperationContract(IsOneWay=true, IsInitiating=false, IsTerminating=true)] void SignOut(string nick); }
Una delle caratteristiche di WCF è la configurabilità tramite attributi. In questo caso, a livello di interfaccia, si imposta l'attributo ServiceContract specificando che sul server bisogna avviare una sessione per ogni client connesso (SessionMode = SessionMode.Required) e qual'è il contratto di callback.
Attenzione: Questo articolo contiene un allegato.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.