Использование Java Webservice с элементами даты и времени в WCF - PullRequest
11 голосов
/ 17 февраля 2010

Мне нужно использовать веб-сервис 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, и он все еще генерирует неправильный код. Кстати, мы закончили изменять сгенерированный код ...

1 Ответ

2 голосов
/ 13 февраля 2012

Потенциальным обходным решением для этой ошибки может быть создание собственного прокси-генератора. Это похоже на изменение сгенерированного кода, но, возможно, лучше, потому что вы изменяете то, что сгенерировано, а не выполняете модификацию после генерации.

См. 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, расширив класс, используемый этим инструментом (это то, что сделано в приведенной выше ссылке).

...