Costruire una chat con Windows Communication Foundation

di Stefano Mostarda, in Windows Communication Foundation,

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.

6 pagine in totale: 1 2 3 4 5 6

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

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

Nessuna risorsa collegata