gpt4 book ai didi

.net - 在 Silverlight 中使用自定义 WCF 序列化器

转载 作者:行者123 更新时间:2023-12-02 15:48:27 25 4
gpt4 key购买 nike

在“完整”.NET 中,更换序列化器非常容易 - 无论是在配置中还是通过自定义属性。但是,我想在 Silverlight 的 WCF 中做类似的事情 - 即提供不同的序列化引擎。我将提供引擎(protobuf-net) - 我只需要让 WCF 来使用它!

上次我看这个(不久前)没有明显的好的选择。我最好的kludge是将数据公开为byte[]Stream - 但这会失去所有“mex”优点。这是一个遗憾,因为它几乎只能在完整的.NET 中运行

这可能吗? WP7 也有奖励积分:)

最佳答案

这是可能的,但是很难做到。 DataContractSerializerOperationBehavior 类(您通常通过重写 CreateSerializer 方法来替换序列化器)是 SL 的内部类,因此您无法真正使用它。您需要做的是创建一个 IOperationBehavior,它执行 DCSOB 的操作 - 即设置 IClientMessageFormatter,客户端将使用它在消息正文(XML 信息集)和操作参数/返回值之间进行转换。这意味着编写代码以将操作中的参数包装到 Message 对象中或从 Message 对象中拆开参数。并非完全不可能,但应该可行。

就 WP7 而言,它不具备该解决方案所需的扩展点(IOperationBehavior、IClientMessageFormatter)不存在(它们是在 SL4 上添加的,WP7 与 SL3 大致兼容),所以我不认为这是可能的 - 或者至少不是以通用方式(您可以使用 Message 对象声明所有操作 - Message MyOperation(Message input) - 在那个阶段您可以直接处理消息 Infoset (GetReaderAtBodyContents),但是需要在每个操作调用中完成。

已更新:嗯,我尝试过,在 Windows Phone 7(和 Silverlight 3)中也可以做到这一点,只是要困难得多。我使用一对自定义 channel 重新创建了可扩展点。有关如何完成此操作的描述可以在 http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/21/wcf-extensibility-extensibility-in-windows-phone-and-silverlight-3.aspx 中找到。 .

关于.net - 在 Silverlight 中使用自定义 WCF 序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6065081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com