2009-07-06 55 views
6

我正在使用.NET 3.5中的WCF實現對等網絡應用程序。要解析對等節點,我正在使用PNRP。WCF點對點,有節點嗎?

IGlobalStoreServiceContract是我的合同,如下圖所示,

[ServiceContract(Namespace = "http://GlobalStoreEventDriven.API", CallbackContract = typeof(IGlobalStoreServiceContract))] 
internal interface IGlobalStoreServiceContract 
{ 
    [OperationContract(IsOneWay = true)] 
    void NotifyGlobalStoreDataInserted(string globalGroup, DateTime maxDateTime); 

    [OperationContract(IsOneWay = true)] 
    void RegisterNode(); 

    [OperationContract(IsOneWay = true)] 
    void SynchronizeMemberList(Guid clientId); 
} 

我使用了一些這樣的代碼加入每個節點的對等網絡。

DuplexChannelFactory<IGlobalStoreChannel> channelFactory = new DuplexChannelFactory<IGlobalStoreChannel>(instance, "GlobalStoreAPIEndPoint"); 
IGlobalStoreChannel globalStoreChannel = channelFactory.CreateChannel(); 

globalStoreChannel.Open(); 

我的問題是,只要我打開通道,我怎麼能最好地分辨其他對等節點是否在網絡上?

例如我可以調用我的合同RegisterNode中的一個方法,並且網絡中的每個節點都可以使用回調調用SynchronizeMemberList。然後我會知道其他節點是否在那裏。

問題在於它是全部異步的。如果我給RegisterNode打電話並且沒有人回覆,這並不意味着沒有人在那裏,這可能意味着我沒有等待足夠長的時間。

你認爲什麼?有什麼建議麼?

回答

5

參見Peer-to-Peer Programming with WCF and .NET Framework 3.5: Peer Name由阿米特Bahree和Chris佩里斯:

創建 和發佈的對等被解析 對等體之後的最終合乎邏輯的步驟。如果其他同行 無法找到你,發佈 什麼是好的?我們使用 PeerNameResolver類來解析 給定雲中的特定對等點。根據 通過的參數, PeerNameResolver可以將同位體解析爲 或者PeerRecord或雲, 。解析過程 完成既可以當達到或 當它已經達成的各項 雲末尾的最大 數爲 PeerRecordCollection記錄條目。

PeerNameResolver類公開了稱爲Resolve的重載方法,該方法用於同步解析給定對等方。

清單17向我們展示瞭如何嘗試解決名爲MySecurePeer的對等問題。 Resolve方法返回一個類型爲PeerNameRecordCollection的集合,我們通過它來迭代。清單18顯示了在具有三個網卡的計算機上運行時的結果。

PeerName myPeer = new PeerName("MySecurePeer", PeerNameType.Secured); 
PeerNameResolver resolver = new PeerNameResolver(); 

PeerNameRecordCollection results = resolver.Resolve(myPeer); 

Console.WriteLine("{0} Peers Found:", results.Count.ToString()); 
int i = 1; 

foreach (PeerNameRecord peer in results) 
{ 
    Console.WriteLine("{0} Peer:{1}", i++, peer.PeerName.ToString()); 
    foreach (IPEndPoint ip in peer.EndPointCollection) 
    { 
     Console.WriteLine("\t Endpoint: {0}", ip.ToString()); 
    } 
} 

所以,我想你應該檢查出PeerNameResolver.Resolve Method

此方法的同事同行名 雲。調用PeerNameResolver 方法類似於調用 Resolve方法中的每個對等名稱 記錄在 PeerNameRecordCollection。請注意, 使用Resolve方法的 單個對等名稱記錄不會 無效解析多個對等名稱 。

對於每個Resolve方法,都有一個 等效方法ResolveAsync方法。它們 與它們的 通過的參數相同,除了 ResolveAsync方法在其參數列表中包括系統 異步事件處理的 令牌。

相關問題