如何实现WCF NetPeerTcpBinding PeerResolver

时间:2010-02-19 23:23:25

标签: wcf p2p

我无法在网络上使用对等名称解析协议,因为我们的服务器场路由器不支持IPv6。

所以,我正在尝试使用数据库实现我自己的PeerResolver

  • Register方法在数据库中插入一行包含meshId,endpointUri和IP地址列表以及创建日期,并返回新创建的行guid作为注册ID。
  • 取消注册方法会从该Guid中删除所有内容。
  • Update方法更新上述信息。
  • My Resolve方法当前忽略maxAddresses参数并返回该meshId数据库中的所有信息。

它作为一个概念验证工作得很好,但由于文档基本上不存在,我很难决定如何管理事物。例如:

  • 如何处理maxAddresses参数。在我的测试中,它似乎通常被调用值为3.为什么3?我该回哪3个?如果我返回的3都不可用但是还有其他地址会怎么样?它会再试一次吗?然后我需要确保在重试时返回不同的3吗?那我该怎么做呢,随机?或者我是否需要在数据库中获得有关节点如何连接到其他节点然后返回地理上接近的节点的信息?
  • 如果应用程序安静地停止,它将调用Unregister,但这显然不会总是发生。我该如何管理清理?
  • 所有超时变量的文档似乎都表明,如果达到限制而没有命令执行它应该执行的操作,我应该抛出TimeoutException。我可以看到,如果您尝试通过网络连接到对等分辨率服务(如PNRP),这将是多么重要,但由于我使用的是本地数据库,我应该忽略这些值吗?
  • CanShareReferrals属性和PeerReferralPolicy枚举的文档非常明确地描述了您可以从属性名称和枚举成员本身推测出的值,但绝对没有深入了解选择其中一个在另一个上的因素。

如果有人在那里有很多WCF经验可以解释这些问题,我会很高兴。

2 个答案:

答案 0 :(得分:1)

正如MSDN所述,Microsoft的对等名称解析协议使用Teredo隧道来解决IP6 / IP4访问问题。

只允许服务器场的Teredo隧道,它只是工作

答案 1 :(得分:1)

您还可以使用此开源框架,以减少实施解析程序的大量开销。然后,您可以专注于编写存储管理器而不是所有管道。它也有相当的记录。

http://wcfpeerresolver.codeplex.com/