我無法在我們的網絡上使用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