Мне нужно использовать веб-сервис Java, который имеет элементы типа Date and Time.
Пример из wsdl:
...
<xsd:element name="fromTime" nillable="true" type="xsd:time" />
<xsd:element name="dateOfInspection" type="xsd:date" />
...
При использовании веб-службы через ссылку на службу Add 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 { ... }
При отправке сообщения возникает ошибка отражения с внутренним исключением:
'time' - недопустимое значение для свойства 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, и он все еще генерирует неправильный код. Кстати, мы закончили изменять сгенерированный код ...