在WCF中使用带有Date和Time元素的Java Web Service

时间:2010-02-17 09:00:36

标签: c# wcf wcf-client

我需要使用具有Date和Time类型元素的Java Webservice。

来自wsdl:

的示例
...
<xsd:element name="fromTime" nillable="true" type="xsd:time" />
<xsd:element name="dateOfInspection" type="xsd:date" />
...

通过添加服务引用消费Web服务时Visual Studio 2008生成以下代码:

[System.Xml.Serialization.SoapElementAttribute(DataType="time", IsNullable=true)]
public System.Nullable<System.DateTime> fromTime { ... }

[System.Xml.Serialization.SoapElementAttribute(DataType="date")]
public System.DateTime dateOfInspection { ... }

使用innerException发送消息会导致反射错误:

'time'是SoapElementAttribute.DataType属性的无效值。该属性只能为基本类型指定。

当删除DataType =“time”和DataType =“date”属性时,一切似乎都有效。但修改生成的代码是一种反模式。那么有没有其他方法让这个工作?

更新

只有日期或时间元素可以为空时才会出现问题!

我在微软连接网站上报告了一个错误。如果您遇到同样的问题,可以在这里投票: https://connect.microsoft.com/VisualStudio/feedback/details/534453/consuming-java-webservice-with-nullable-date-and-time-elements-in-wcf-generates-invalid-datatype-attributes

更新2:

微软证实这是一个错误并且不太理解。

更新3:

我使用VS2010进行了检查,但仍然生成了错误的代码。顺便说一句,我们最终修改了生成的代码...

1 个答案:

答案 0 :(得分:2)

该错误的潜在解决方法是创建自己的代理生成器。这与修改生成的代码类似,但可以说更好,因为您正在改变生成的内容,而不是进行后代修改。

有关说明,请参阅http://blogs.msdn.com/b/pedram/archive/2007/08/10/customising-wcf-proxy-generation-in-visual-studio-2008.aspx。有关您需要创建的注册表项的路径的注释:VS2010将在注册表路径中具有10.0作为版本,而在64位Windows上,它需要位于SOFTWARE\Wow6432Node\Microsoft,而不是SOFTWARE\Microsoft。< / p>

我不确定这是哪个生成器并且不可能/容易,除非您可以通过扩展该工具使用的类来使用WcfProxyGenerator(这是&#39; s&# 39;在上面的链接中完成。)