我无法在我们的网络上使用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经验谁可以解决这些问题。
我不认为NetPeerTcpBinding是服务器农场,为什么你想使用它一个很好的匹配。 – 2010-02-25 11:21:49
我认为在各种原因的服务器上都有可以相互通信状态的进程会很有趣,但是这实际上并不相关。问题是关于如何在PNRP(无论出于何种原因)的情况下实施PeerResolver不是一种选择。 – 2010-02-26 18:01:28