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
Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Pagina 5
- Pagina 6







Difficoltà
Utilità
Stampa
Download



ciao Stefano, bell'articolo, molto interessante l'invocazione asincrona dei delegati sottoscritti all'evento.- C'é un motivo per cui non hai usato la ...
Continua »»» | Rispondi »»»