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.
Approfondimenti
Avviare una registrazione audio e video in una applicazione della Universal Windows Platform
Utilizzare la libreria FluentValidation per validare formalmente un oggetto .NET
Creare un effetto di ombra sui controlli della Universal Windows Platform
Il futuro delle applicazioni Windows con .NET 5
Windows and app development with MAUI
Dark mode e selezione dei temi in un'applicazione Xamarin Forms
UI testing in applicazioni .NET desktop e mobile
Effettuare il multibinding in un'applicazione Xamarin Forms
Modificare il layout della paginazione del controllo CarouselView in Xamarin Forms