Видя что-то странное между веб-сервисом Java и клиентом .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;
}
}
}
Мы получаем объекты с датами просто отлично, но когда мы отправляем их обратно в веб-службу, свойство expirationDate
показывалось как null
. Мы посмотрели на необработанный XML, который получал Java-сервер, и тега expirationDate
там не было, вроде как:
<myClass><name>My Name</name></myClass>
(Это не точный XML, но достаточно близко). Я дважды проверил, и expirationDate
определенно установлен на клиенте .NET перед отправкой. XSD для WSDL не выглядит странно:
<xs:element name="Expiration" type="xs:dateTime" minOccurs="0"/>
Мы используем тот же тип для других вещей, которые также хорошо работают. На стороне .NET мы используем инструмент wsdl.exe
для генерации классов и кода.
Еще один шаг, который мы могли бы сделать, - это увидеть XML, сгенерированный .NET, прежде чем он вызовет веб-сервис, но я не знаю, как это сделать. Любые другие мысли или предложения?