契约优先WCF SOAP开发:控制原始类型XML序列化

时间:2017-05-31 16:33:55

标签: c# xml wcf soap datacontract

我正在从给定的wsdl(合同优先开发)实现C#WCF SOAP 1.1服务(服务器端)。我面临的问题是xsd:dateTime,xsd:decimal和xsd:time还有其他(非wsdl)格式要求。

SvcUtil.exe生成的合同执行标准XML序列化格式化日期和小数的方式略有不同。

鉴于提供的示例SOAP消息,我的WCF服务存根在理解和转换这些格式时没有任何问题。但我的回复确实包含额外的信息 - 时区,毫秒,小数点后的额外数字。

Wsdl非常庞大 - 超过100条消息,1000多种复杂类型。复杂类型的原始属性映射到XML属性。看起来它起源于一些java框架。

  1. postprocess SOAP with either RegExpOnWriteBodyContents的任何地方,MessageFormatter或XSLT会变得简单而丑陋。

  2. 昂贵的解决方案是构建自己的code-from-wsdl构建器,它将产生额外的字符串属性,如here所述。

  3. 我试图找到一种方法,使用XmlSerializerproxy deserialize helper或自定义值类型自定义IXmlSerializable。两种解决方案都没有效只有固定的基元类型列表可以放入xml属性中。

  4. 因此,另一种昂贵的方法是编写自己的xml序列化程序,因为.NET XmlSerializer是一个黑盒子,并且无法控制基本类型的序列化。

  5. 有更好的想法吗?

    格式规范:

    xsd:decimal: No more than two digits after decimal
    xsd:dateTime: YYYY-MM-DDThh:mm:ss, no milliseconds, no time zone
    xsd:time: hh:mm:ss.sss
    xsd:date: YYYY-MM-DD
    

0 个答案:

没有答案