Dot-Net

在 Silverlight 中使用自定義 WCF 序列化程序

  • January 28, 2013

在“完整的”.NET 中,更換序列化程序非常容易——無論是在配置中,還是通過自定義屬性。但是,我想在 Silverlight 的 WCF 中做一些類似的事情——即提供不同的序列化引擎。我將提供引擎(protobuf-net)——我只需要讓 WCF 使用它!

上次我看這個(前一段時間)沒有明顯的好選擇。我最好的辦法是將數據公開為byte[]Stream- 但這失去了所有“墨西哥”的優點。真可惜,因為這一切幾乎都可以在完整的 .NET 中執行。

這還有可能嗎?WP7 也有獎勵積分 :)

這是可能的,但很難做到。DataContractSerializerOperationBehavior 類(通常通過重寫 CreateSerializer 方法來替換序列化程序)在 SL 中是內部的,因此您不能真正使用它。您需要做的是創建一個 IOperationBehavior,它執行 DCSOB 所做的工作 - 即,設置客戶端將用於在消息正文(XML 資訊集)和操作參數/返回值之間進行轉換的 IClientMessageFormatter。這意味著編寫程式碼以將操作中的參數包裝/解包到 Message 對像中。並非完全不可能,但它應該可以工作。

就 WP7 而言,它沒有此解決方案所需的擴展點(IOperationBehavior、IClientMessageFormatter)不存在(它們是在 SL4 上添加的,WP7 與 SL3 大致兼容),所以我認為不可能那裡 - 或者至少不是以通用方式(您可以使用 Message 對象聲明所有操作 - Message MyOperation(Message input) - 在那個階段您可以直接處理消息 Infoset (GetReaderAtBodyContents),但這需要在每個操作呼叫中完成。

更新:嗯,我試過了,也可以在 Windows Phone 7(和 Silverlight 3)中做到這一點,只是要困難得多。我使用一對自定義通道重新創建了擴展點。可以在http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/21/wcf-extensibility-extensibility-in-windows-phone-and-silverlight-找到有關如何完成此操作的說明3.aspx

引用自:https://stackoverflow.com/questions/6065081