11

我需要使用具有日期和时间类型元素的 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 的反射错误:

“时间”是 SoapElementAttribute.DataType 属性的无效值。只能为原始类型指定该属性。

删除 DataType="time" 和 DataType="date" 属性时,一切似乎都正常。但是修改生成的代码是一种反模式。那么还有其他方法可以让这个工作吗?

更新:

仅当日期或时间元素可以为空时,才存在问题!

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

更新 2:

微软确认这是一个错误,不太可能修复。

更新 3:

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

4

1 回答 1

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\MicrosoftSOFTWARE\Microsoft.

我不确定这是哪些生成器并且不可能/容易使用,除了您可以通过扩展该工具使用的类来使用 WcfProxyGenerator 来完成它(这就是上面链接中所做的)。

于 2012-02-13T16:55:19.203 回答