swi*_*ams 1 .net java wsdl web-services
看到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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们收到的对象的日期很好,但是当我们将它们发送回Web服务时,该expirationDate属性显示为null。我们查看了Java服务器正在接收的原始XML,并且该XML的标签expirationDate不存在,就像这样:
<myClass><name>My Name</name></myClass>
Run Code Online (Sandbox Code Playgroud)
(这不是确切的XML,但足够接近)。我经过仔细检查,expirationDate并确定在发送之前在.NET客户端上进行了设置。WSDL的XSD看起来并不奇怪:
<xs:element name="Expiration" type="xs:dateTime" minOccurs="0"/>
Run Code Online (Sandbox Code Playgroud)
我们在其他事情上使用相同的类型,也可以正常工作。在.NET方面,我们正在使用该wsdl.exe工具生成类和代码。
我们可以采取的另一步骤是在调用Web服务之前查看.NET生成的XML,但我不知道该怎么做。还有其他想法或建议吗?
当值类型在架构中为可选时,WSDL.EXE会为该值生成一个属性,并为一个bool属性来指示该值是否存在。您应该具有一个ExpirationSpecified属性,当您要发送到期日期时,需要将其设置为true;否则,请设置为false。
| 归档时间: |
|
| 查看次数: |
2123 次 |
| 最近记录: |