2010-02-19 57 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/