2010-02-19 59 views
5

我无法在我们的网络上使用Peer Name Resolution Protocol,因为我们的服务器场的路由器不支持IPv6。如何实现WCF NetPeerTcpBinding PeerResolver

因此,我试图使用数据库实现我自己的PeerResolver

  • Register方法会在数据库中插入一行,其中包含meshId,endpointUri和IP地址列表以及创建的日期,并返回一个新创建的行guid作为注册标识。
  • Unregister方法从该Guid中删除所有内容。
  • Update方法更新上述信息。
  • 我的解析方法当前IGNORES maxAddresses参数并返回数据库中该meshId的所有信息。

它作为一个概念验证非常好,但由于文档基本上是不存在的,所以我很难决定如何管理事情。例如:

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

我很喜欢它,如果有人在那里有很多的WCF经验谁可以解决这些问题。

+1

我不认为NetPeerTcpBinding是服务器农场,为什么你想使用它一个很好的匹配。 – 2010-02-25 11:21:49

+0

我认为在各种原因的服务器上都有可以相互通信状态的进程会很有趣,但是这实际上并不相关。问题是关于如何在PNRP(无论出于何种原因)的情况下实施PeerResolver不是一种选择。 – 2010-02-26 18:01:28

回答

1

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

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

+0

问题是“如何实现WCF NetPeerTcpBinding PeerResolver”,而不是“如何避免实现WCF NetPeerTcpBinding。” – 2010-02-28 22:10:26

+0

基于“如果有人在那里有很多WCF经验可以解决这些问题,我很乐意。”我回答了!我们花费了很多时间试图建立自己的公关(反对很好的建议),最后我们只是使用Teredo – TFD 2010-03-01 00:52:26

+0

该信息很有帮助 - 谢谢!微软提供的这个抽象基类非常令人沮丧,它实际上尖叫着“实现我”!基本上没有关于实施最佳实践的信息。 – 2010-03-01 14:03:08

1

您也可以使用这个开源框架,减少了很多实现解析器的开销。然后你可以专注于写存储管理器而不是所有的管道。它也有相当的文件记录。

http://wcfpeerresolver.codeplex.com/