Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

Applicazioni Peer-to-Peer in .NET 3.5

Contrordine... Mi lascio un appunto qui, così l'anno nuovo so già a cosa dovrò lavorare Smile.

Mi sto riferendo ai nuovi oggetti forniti dal .NET Framework 3.5 per la gestione di applicazioni Peer-to-Peer: in particolare, PeerName, PeerNameRegistration e PeerNameResolver, contenuti nel namespace System.Net.PeerToPeer. Grazie ad essi, realizzare applicazioni Peer-to-Peer è di una semplicità sconcertante. Ad esempio, il seguente codice pubblica un nuovo peer:

1 // Creates a secured PeerName. 2 PeerName peerName = new PeerName("MyPeerNode", PeerNameType.Secured); 3 4 PeerNameRegistration pnReg = new PeerNameRegistration(peerName, 4567, Cloud.Global); 5 pnReg.UseAutoEndPointSelection = true; 6 pnReg.Comment = "up to 39 unicode char comment"; 7 pnReg.Data = Encoding.UTF8.GetBytes("A data blob up to 4K associated with the name"); 8 9 //Starting the registration means the name is published for other peers to resolve. 10 pnReg.Start(); 11 12 Console.WriteLine("Registration of Peer Name: {0} complete.", peerName.ToString()); 13 14 Console.WriteLine("Press any key to stop the registration and close the program"); 15 Console.ReadKey(); 16 17 pnReg.Stop();

Il codice è abbastanza autoesplicativo. L'unica nota la merita l'istruzione 4, con cui si crea l'oggetto che si occupa di effettuare la registrazione vera e propria del peer: utilizzando il parametro Cluod.Global, si indica al sistema che il peer deve essere visibile globalmente (ovvero su tutta Internet).

Il discovery dei peer è altrettanto semplice:

 

1 // Create a resolver object to resolve a peername. 2 PeerNameResolver resolver = new PeerNameResolver(); 3 PeerName peerName = new PeerName("MyPeerNode", PeerNameType.Secured); 4 // Resolve the PeerName - this is a network operation and will 5 // block until the resolve request is completed. 6 PeerNameRecordCollection results = resolver.Resolve(peerName, Cloud.Global); 7 8 // Show the data returned by the resolve operation. 9 Console.WriteLine("Records from resolution of PeerName: {0}", results.Count); 10 Console.WriteLine(); 11 int count = 1; 12 foreach (PeerNameRecord record in results) 13 { 14 Console.WriteLine("Record #{0} results...", count); 15 16 Console.WriteLine("Comment:"); 17 if (record.Comment != null) 18 Console.WriteLine(record.Comment); 19 20 Console.WriteLine("Data:"); 21 if (record.Data != null) 22 Console.WriteLine(Encoding.UTF8.GetString(record.Data)); 23 24 Console.WriteLine("Endpoints:"); 25 foreach (IPEndPoint endpoint in record.EndPointCollection) 26 Console.WriteLine("\t Endpoint: {0}", endpoint.Address); 27 28 count++; 29 } 30

In questo caso, l'istruzione fondamentale è quella alla riga 6, con cui si effettua il discovery: anche stavolta, si utilizza Cloud.Global, indicando che si vuole fare una ricerca globale (altrimenti sarebbe limitata ai peer registrati nella propria sottorete). Nell'esempio, il discovery è effettuato in maniera sincrona, ma sono disponibili anche i metodi e gli eventi per realizzare il tutto in modo asincrono.

Naturalmente questo è solo il punto di partenza. Ci sarebbe molto da dire su come funziona il supporto al Peer-to-Peer in .NET, su cosa avviene "dietro le quinte" quando si registra un peer e quando si avvia il discovery... Ma di questo parleremo l'anno nuovo Tongue out... Adesso vi lascio veramente ai festeggiamenti... A presto, miei cari 25 lettori!

Technorati tags: , ,

Print | posted on Sunday, December 30, 2007 10:33 AM | Filed Under [ C# Orcas & .NET 3.5 ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET