我正在从给定的wsdl(合同优先开发)实现C#WCF SOAP 1.1服务(服务器端)。我面临的问题是xsd:dateTime,xsd:decimal和xsd:time还有其他(非wsdl)格式要求。
SvcUtil.exe
生成的合同执行标准XML序列化格式化日期和小数的方式略有不同。
鉴于提供的示例SOAP消息,我的WCF服务存根在理解和转换这些格式时没有任何问题。但我的回复确实包含额外的信息 - 时区,毫秒,小数点后的额外数字。
Wsdl非常庞大 - 超过100条消息,1000多种复杂类型。复杂类型的原始属性映射到XML属性。看起来它起源于一些java框架。
在postprocess SOAP with either RegExp或OnWriteBodyContents
的任何地方,MessageFormatter
或XSLT会变得简单而丑陋。
昂贵的解决方案是构建自己的code-from-wsdl构建器,它将产生额外的字符串属性,如here所述。
我试图找到一种方法,使用XmlSerializer
或proxy deserialize helper或自定义值类型自定义IXmlSerializable
。两种解决方案都没有效只有固定的基元类型列表可以放入xml属性中。
因此,另一种昂贵的方法是编写自己的xml序列化程序,因为.NET XmlSerializer
是一个黑盒子,并且无法控制基本类型的序列化。
有更好的想法吗?
格式规范:
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