2011-08-22 71 views
2

我目前在.Net 3.5中有幾個WCF服務,它通過NetTCP綁定與客戶端進行通信。我們從WsHTTP綁定切換到NetTCP,以減少客戶端和服務器之間的數據流量(NetTCP har二進制編碼傳輸)。WCF中的二進制序列化NetTCPBinding

我們對結果並不滿意(在我們的測試中只減少了30%),並且希望使用二進制序列化器而不是默認的xml序列化對象。

這會減少有效載荷嗎?如何在WCF中實現二進制序列化?我們使用輸入的數據集作爲傳輸對象..

回答

4

絕對沒有諷刺意圖,但您應該認真考慮使用普通對象而不是數據集的服務的數據合同。強類型的數據集對象可能非常複雜(只需查看後面的代碼),並且它的任何序列化都將非常龐大,尺寸明智。 NetTcpBinding已經使用了一個應該產生更小負載的二進制串行器。另外,如果您嘗試創建可查詢/靈活的服務層,請使用resource-based service architecture來代替。

如果認爲您可以改進Microsoft的二進制編碼器netTcpBinding,請參閱此MSDN post中引用的示例代碼以開始使用。

+1

你好,謝謝。該項目完全鎖定使用強類型數據集,所以這不是一個選項。你確定NetTCPBinding使用二進制串行器嗎?我知道序列化的對象是用二進制編碼傳輸的,但我認爲這些對象是正常序列化的(xml)? – Martin

+0

我現在沒有時間來驗證這一點,但我相信netTcpBinding使用**二進制** XML序列化格式[在此MSDN文章中記錄。](http://msdn.microsoft.com/en-us /library/cc219210(v=PROT.10).aspx)如果你正在考慮滾動你自己的序列化格式,肯定會檢查該文檔。這[MSDN博客文章](http://blogs.msdn.com/b/carlosfigueira/archive/2011/03/29/wcf-extensibility-icontractbehavior.aspx)會讓你開始了這條路線。祝你好運! –