WCF点对点,那里有节点吗?

时间:2009-07-06 02:10:51

标签: c# .net wcf

我在.NET 3.5中使用WCF来实现对等网络应用程序。要解析对等节点,我使用的是PNRP。

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并且没有人回复,那并不意味着没有人在那里,这可能只是意味着我没等多久。

你觉得怎么样?有什么建议吗?

1 个答案:

答案 0 :(得分:5)

见Amit Bahree和Chris Peiris的Peer-to-Peer Programming with WCF and .NET Framework 3.5: Peer Name

  

创建后的最后一个逻辑步骤   并且发布同行正在解决问题   同行。发布有什么好处   如果另一个同伴,云计算的东西   找不到你?我们用的是   要解决的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方法包括一个系统   令牌在其参数列表中   异步事件处理。