【发布时间】:2009-03-24 14:54:14
【问题描述】:
在 Java Web 服务和与之交谈的 .NET 客户端之间看到了一些奇怪的东西。我们来回发送一个带有DateTime 属性的对象。有点像这样(从 WSDL 生成):
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://ournamespace.com/")]
public partial class myClass {
private System.DateTime expirationDateField;
private string nameField;
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public System.DateTime expirationDate {
get {
return this.expirationDateField;
}
set {
this.expirationDateField = value;
}
}
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string name {
get {
return this.nameField;
}
set {
this.nameField = value;
}
}
}
我们可以正常接收带有日期的对象,但是当我们将它们发送回 Web 服务时,expirationDate 属性显示为null。我们查看了 Java 服务器正在接收的原始 XML,并且没有 expirationDate 的标记,有点像这样:
<myClass><name>My Name</name></myClass>
(这不是确切的 XML,但足够接近)。我仔细检查了一下,expirationDate 在发送之前肯定是在 .NET 客户端上设置的。 WSDL 的 XSD 看起来并不奇怪:
<xs:element name="Expiration" type="xs:dateTime" minOccurs="0"/>
我们在其他事情上使用相同的类型,效果也很好。在 .NET 方面,我们使用wsdl.exe 工具来生成类和代码。
我们可以采取的另一个步骤是在 .NET 调用 Web 服务之前查看由 .NET 生成的 XML,但我不知道该怎么做。还有其他想法或建议吗?
【问题讨论】:
标签: java .net web-services wsdl