使用 WCF 和 Data Contract Serializer 时需要生成 XmlSerializers 程序集

Posted

技术标签:

【中文标题】使用 WCF 和 Data Contract Serializer 时需要生成 XmlSerializers 程序集【英文标题】:Need for generating XmlSerializers assemblies when using WCF and Data Contract Serializer 【发布时间】:2015-04-18 06:52:16 【问题描述】:

This article 描述了如何通过使用svcutil.exe(或sgen.exe)为程序集预生成序列化代码来缩短WCF 客户端应用程序的启动时间。但是,它只提到使用XmlSerializer 提高序列化/反序列化的性能。

WCF 的默认序列化程序是DataContractSerializer,我的问题是:对于只与 WCF 服务通信的 WCF 客户端,生成 *.XmlSerializers.dll 程序集有什么好处吗?我能找到的关于这个特定问题的唯一信息来源是 MSDN 上的this thread。给出的答案可能暗示生成XmlSerializers只影响XmlSerializer的序列化,但并没有说清楚。

【问题讨论】:

【参考方案1】:

来自Using the XmlSerializer class MSDN article,“安全注意事项”部分:

使用 XmlSerializer 时存在的另一个威胁与对系统临时文件夹的写入权限有关。 XmlSerializer 序列化引擎在此文件夹中创建和使用临时序列化程序集。

这在与DataContractSerializer 的合同中有所提及,因此在使用DataContractSerializer 时生成*.XmlSerializers.dll 似乎没有任何价值。

【讨论】:

虽然你可能是对的,但文章并没有明确说明默认 DataContractSerializer 不使用序列化程序集。 是的。最简单的假设是它没有,这个假设得到了我进行的实验的支持。 DataContractSerializer 是否使用任何临时程序集进行序列化/反序列化,如 XMLSerializer,您是否阅读过任何相关信息?

以上是关于使用 WCF 和 Data Contract Serializer 时需要生成 XmlSerializers 程序集的主要内容,如果未能解决你的问题,请参考以下文章

WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化

wcf双工通讯

WCF 和 127.0.0.1 与 localhost

复习知识点

WCF 继承合约和回调合约

WCF快速上手