我正在 .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 并且没有人回复,这并不意味着没有人在那里,这可能只是意味着我没有等待足够长的时间。
你怎么看?有什么建议么?
See 使用 WCF 和 .NET Framework 3.5 进行对等编程:对等名称 http://msdn.microsoft.com/en-us/library/cc297274.aspx#WCFP2P_topic7作者:阿米特·巴赫里 (Amit Bahree) 和克里斯·佩里斯 (Chris Peiris):
创建后的最后一个逻辑步骤
发布一个对等点正在解决
同行。发表有什么好处
如果另一个对等点将某些内容传输到云端
找不到你?我们使用PeerNameResolver
要解决的类
给定云中的特定对等点。这PeerNameResolver
可以将同级解析为
要么是PeerRecord
或一朵云,
取决于参数
通过了。解决过程
当达到最大值时完成
的记录条目数PeerRecordCollection
已达到或
当它到达各种结束时
云。
The 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 http://msdn.microsoft.com/en-us/library/system.net.peertopeer.peernameresolver.resolve.aspx:
此方法将对等名称关联到
云。呼叫PeerNameResolver
方法类似于调用Resolve
每个对等名称的方法
记录在PeerNameRecordCollection
。注意
使用Resolve
上的方法
个别对等名称记录不
使解析多个对等点无效
名称。
对于每一个Resolve
方法,有一个
相等的ResolveAsync
方法。他们
它们的参数相同
都通过了,除了ResolveAsync
方法包括系统
其参数列表中的 token 为
异步事件处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)