Подтвердить что ты не робот

Использование Java Webservice с элементами даты и времени в WCF

Мне нужно использовать Java Webservice, который имеет элементы типа Date и Time.

Пример из wsdl:

...
<xsd:element name="fromTime" nillable="true" type="xsd:time" />
<xsd:element name="dateOfInspection" type="xsd:date" />
...

При использовании Webservice с помощью Add Service Reference 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" все работает. Но изменение сгенерированного кода является анти-шаблоном. Так есть ли другой способ заставить это работать?

Update:

Проблема существует, только если элементы даты или времени имеют значение NULL!

Я сообщил об ошибке на сайте Microsofts connect. Если у вас такая же проблема, вы можете проголосовать за нее здесь: 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 и все еще генерирует неправильный код. Btw, мы закончили модификацию сгенерированного кода...

4b9b3361

Ответ 1

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

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