在“完整”.NET中,可以很容易地将串行器(在配置中)或通过自定义属性进行交换.但是,我想在Silverlight的WCF中做类似的事情 – 即提供一个不同的序列化引擎.我将提供引擎(protobuf-net) – 我只需要让WCF使用它!
上次我看了这个(前段时间),没有什么好的选择是显而易见的.我最好的kludge是将数据暴露为byte []或Stream – 但是这丢失了所有的“mex”优点.这是一个耻辱,因为它完全可以在完整的.NET中工作.
这是可能吗奖金积分WP7太:)
解决方法
这是可能的,但很难做到. DataContractSerializerOperationBehavior类(通常通过覆盖CreateSerializer方法来替换序列化程序)在SL中是内部的,因此您无法真正使用它.您需要做的是创建一个执行DCSOB所做的IOperationBehavior,即设置客户端将在消息体(
XML Infoset)和操作参数/返回值之间转换的IClientmessageformatter.这将意味着编写代码将操作中的参数包装/解包到/从Message对象中.不完全不可能,但它应该工作.
至于WP7,它没有这个解决方案所需的可扩展性点(IOperationBehavior,IClientmessageformatter)不存在(它们被添加到SL4上,WP7与SL3大致兼容),所以我不认为这是可能的那么 – 至少不是以通用的方式(你可以使用Message对象 – Message MyOperation(消息输入)声明所有的操作),并且在那个阶段你可以直接处理消息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找到关于如何完成的说明.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。