Windows Communication Foundation è un framework molto completo e il suo punto di forza è basato sul fatto che indipendentemente dal tipo di messaggio o dall'insfrastruttura di sicurezza che si vuole usare, è in grado di variare nel mezzo di trasporto con cui viaggiano i messaggi.
E' infatti disponibile una tipologia di Binding di nome netPeerTcpBinding che permette di far comunicare una serie di nodi tra di loro senza l'ausilio di un server centrale. Questo vuol dire che grazie alle funzionalità di callback di WCF, ogni messaggio (un'operazione) che un peer manda, viene inviato a se stesso e anche agli altri peer della stessa cloud (gruppo di peer). In questo script si crea quindi una chat basata su questo meccanismo definendo, come è solito fare, l'interfaccia rappresentante le operazioni che si vogliono supportare:
[ServiceContract(Namespace = "http://schemas.winfxitalia.com/Chat", CallbackContract = typeof(IChat))]
public interface IChat
{
[OperationContract(IsOneWay = true)]
void Login(string name);
[OperationContract(IsOneWay = true)]
void Logout(string name);
[OperationContract(IsOneWay = true)]
void Chat(string name, string message);
}
Occorre poi implementare quest'interfaccia per far sì che ogni utente nella chat riceva i propri e i messaggi altrui, oltre alle notifiche di entrata ed uscita degli utenti:
void IChat.Login(string name)
{
Console.WriteLine("{0} has logged in", name);
}
void IChat.Logout(string name)
{
Console.WriteLine("{0} has logged out", name);
}
void IChat.Chat(string name, string message)
{
Console.WriteLine("{0}: {1}", name, message);
}
Come solito in WCF, occorre poi configurare il servizio nel file .config per indicare che il servizio utilizza il netPeerTcpBinding indicando qual è il resolver utilizzato per individuare i peer. Si tratta di un'importante componente che mantiene la lista dei peer associati ad ogni cloud. Il tipo Pnrp utilizza una funzionalità di Windows che si basa su un server centrale gestito da Microsoft.
<system.serviceModel>
<client>
<endpoint name="ChatService"
address="net.p2p://winfxitalia/Chat"
binding="netPeerTcpBinding"
bindingConfiguration="chatBinding"
contract="PeerChat.IChat">
</endpoint>
</client>
<bindings>
<netPeerTcpBinding>
<binding name="chatBinding" port="0">
<security mode="None" />
<resolver mode="Pnrp" />
</binding>
</netPeerTcpBinding>
</bindings>
</system.serviceModel>
Infine, occorre creare il canale e utilizzare l'interfaccia per mandare e notificare l'entrata e l'uscita dell'utente:
// Creo il factory per la creazione del canale
// Utilizza la classe stessa come implementazione del callback
DuplexChannelFactory<IChatChannel> factory = new DuplexChannelFactory<IChatChannel>(this, "ChatService");
// Creo il canale
chatChannel = factory.CreateChannel();
// Apro il canale di comunicazione
chatChannel.Open();
Console.Write("Insert user name: ");
string userName = Console.ReadLine();
// Inizio lo scambio di messaggi
chatChannel.Login(userName);
string msg;
while ((msg = Console.ReadLine()).Length > 0)
{
chatChannel.Chat(userName, msg);
}
chatChannel.Logout(userName);
- Gestione delle eccezioni in Windows Communication Foundation
- #63 - Serializzare le entità di LINQ to SQL con WCF
- Autopsia di un'applicazione - seconda puntata gli MDA (Managed Debug Assistants)
- Service Oriented e i tanti file di configurazione.
- #943 - Leggere feed RSS e Atom con il .NET Framework 3.5
- #61 - Caricare o salvare markup XAML a runtime
- Redgate ANTS Profiler 4.0
- Windows Presentation Foundation 3.5: 3D interattivo e le altre novità del framework
- #41 - Anteprima automatica dei video con MediaTimeline
- Speciale Windows SharePoint Services
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!