Tho*_*mas 11 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" />
...
Run Code Online (Sandbox Code Playgroud)
通过添加服务引用消费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 { ... }
Run Code Online (Sandbox Code Playgroud)
使用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-生成-无效-数据类型的属性
更新2:
微软证实这是一个错误,并且不太理解.
更新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 来完成此操作(这就是上面链接中所做的操作)。