c# - 在 WCF 中使用具有日期和时间元素的 Java Webservice

标签 c# wcf wcf-client

我需要使用具有日期和时间类型元素的 Java Web 服务。

来自 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 { ... }

发送消息导致内部异常反射错误:

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

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

更新:

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

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

更新 2:

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

更新 3:

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

最佳答案

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

参见 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

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

关于c# - 在 WCF 中使用具有日期和时间元素的 Java Webservice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2279370/

相关文章:

c# - 如何创建多个Excel工作表

c# - 传递字符串参数时 'S'附近的语法不正确

c# - 字典和获取一种类型的值

wcf - 元素 'behavior' 具有无效的子元素 'transportClientEndpointBehavior' 也是 basicHttpRelayBinding

c# - 我应该考虑在 WCF 双工服务上使用 SignalR 吗?

wcf - 内存泄漏 - WCF 异常

c# - 使 WCF 代理对服务关闭使用react的问题

WCF 代理客户端需要时间来创建它的任何缓存或单例解决方案

c# - IEnumerable<T>.Concat——无需更改引用即可工作的替代品?

wcf - 如何使 WCF 客户端符合特定的 WS-Security