首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF Peer to Peer,有节点吗?

WCF Peer to Peer,有节点吗?
EN

Stack Overflow用户
提问于 2009-07-06 02:10:51
回答 1查看 2.9K关注 0票数 6

我正在使用.NET 3.5中的WCF实现一个点对点的网络应用程序。为了解析对等节点,我使用了PNRP。

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

代码语言:javascript
复制
[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);
}

我正在使用一些类似这样的代码将每个节点加入对等网络。

代码语言:javascript
复制
DuplexChannelFactory<IGlobalStoreChannel> channelFactory = new DuplexChannelFactory<IGlobalStoreChannel>(instance, "GlobalStoreAPIEndPoint");
IGlobalStoreChannel globalStoreChannel = channelFactory.CreateChannel();

globalStoreChannel.Open();

我的问题是,一旦我打开了通道,我如何才能最好地判断其他对等节点是否在网络上?

例如,我可以调用契约RegisterNode中的一个方法,网络中的每个节点都可以使用回调来调用SynchronizeMemberList。然后我就会知道其他节点是否在那里。

这样做的问题是它都是异步的。如果我呼叫RegisterNode但没有人应答,这并不意味着没有人在那里,它可能只是意味着我没有等待足够长的时间。

你觉得呢?有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-06 23:22:29

请参阅阿米特·巴赫里和克里斯·佩里斯的Peer-to-Peer Programming with WCF and .NET Framework 3.5: Peer Name

创建和发布对等体后的最后一个逻辑步骤是解析对等体。如果其他同级找不到您,那么将某些内容发布到云中有什么用呢?我们使用PeerNameResolver类来解析给定云中的特定对等点。根据传递的参数,PeerNameResolver可以将对等方解析为PeerRecord或云。当达到PeerRecordCollection的最大记录条目数或到达各种云的末尾时,解析过程结束。

PeerNameResolver类公开一个名为Resolve的重载方法,用于同步解析给定的对等方。

清单17向我们展示了如何尝试解析名为MySecurePeer的对等体。Resolve方法返回一个PeerNameRecordCollection类型的集合,我们通过该集合进行迭代。清单18显示了在具有三个网卡的计算机上运行时的结果。

代码语言:javascript
复制
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方法类似于为PeerNameRecordCollection中的每个对等名称记录调用Resolve方法。请注意,在单个对等名称记录上使用Resolve方法不会使解析多个对等名称无效。

对于每个Resolve方法,都有一个等效的ResolveAsync方法。除了ResolveAsync方法在其参数列表中包含用于异步事件处理的系统令牌之外,它们在传递的参数中是相同的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1085132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档