Ссылка на веб-сервис .NET сгенерированные классы не работают с типом dateTime - PullRequest
11 голосов
/ 15 августа 2011

Я написал веб-сервис JAX-WS на Java, сгенерировав WSDL и классы из схемы XML.

Я добавляю службу в качестве веб-ссылки в Visual Studio для использования с клиентским приложением C # .NET.

Исходная XML-схема использует несколько типов даты / времени: xs: date и xs: dateTime для некоторых элементов.

Моя проблема в том, что мой тип dateTime работает неправильно. Он преобразуется в объект .NET DateTime (правильно) в сгенерированных классах (созданных XMLSerializer в Visual Studio 2010), а затем я могу создать свой собственный объект DateTime и установить DateTime в одном из этих классов. Однако при отправке запроса обратно на сервер клиентское приложение отправляет нулевое значение вместо объекта DateTime, для которого я его установил. Так что я думаю, что это не правильно сериализуется.

У меня нет той же проблемы с типом 'date', который отлично сериализует / десериализует.

Я заметил кое-что, что могло быть проблемой, но не уверен:

Объект dateTime в сгенерированном классе выглядит следующим образом: [System.Xml.Serialization.XmlElementAttribute (заказ = 10)] public System.DateTime MyDateTime {...}

тогда как объект даты в сгенерированном классе выглядит следующим образом: [System.Xml.Serialization.XmlElementAttribute (DataType = "date", Order = 12)] public System.DateTime MyDate {...}

Итак, в объекте даты есть некоторая дополнительная информация - DataType = "date", но для объекта dateTime нет DateType. Может ли это быть проблемой? Если да, то почему он не генерирует классы правильно?

Спасибо за любую помощь

Ответы [ 4 ]

4 голосов
/ 17 июня 2013

У меня был элемент dateTime, который не был обязательным в wsdl, и, хотя я установил свойство для .NET-объекта, который будет отправляться, он не передавался как XML. (Я сделал отладку с помощью .NET Trace log viewer ).

Позже я понял, что мне нужно установить значение true, которое было указано рядом со свойством DateTime, и оно будет работать. xxxSpecified. См. Код ниже.

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order=6)]
public System.DateTime Created {
    get {
        return this.createdField;
    }
    set {
        this.createdField = value;
        this.RaisePropertyChanged("Created");
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool CreatedSpecified {
    get {
        return this.createdFieldSpecified;
    }
    set {
        this.createdFieldSpecified = value;
        this.RaisePropertyChanged("CreatedSpecified");
    }
}
3 голосов
/ 12 октября 2011

Я работал с Livecycle на машине JBoss.Оттуда я подключил веб-сервисы к .net.Я обнаружил, что DateTime и Booleans не переводятся правильно.Я знаю, что это не очень хорошая форма, но я поместил атрибут типа данных serialize в строку.Это был способ, которым я мог получить данные для передачи.

Я бы проверил, что написал kroonwijk.Fiddler - это хороший инструмент для проверки поступления и ухода услуг.

2 голосов
/ 12 октября 2011

Я столкнулся с этой проблемой до и после большой кропотливой работы, я обнаружил, что в одном конце сообщения использовался формат даты Великобритании (дд / мм / гггг), а в другом - американский (ММ / дд / гггг) ) формат. Это установлено в культуре глобализации на машине (как ответ @Gaurav), однако, следующее не было так очевидно:

когда я запускал свой код под VS, я работаю как я и, следовательно, моя собственная культура en-GB. Как вы, возможно, знаете, когда я запускаю код под IIS, он запускается под учетной записью ASPNET (или NETWORK SERVICE и т. Д. В зависимости от версии IIS). Оказывается, что учетная запись ASPNET имеет культуру en-US, отсюда и проблема.

Простым решением является добавление тега глобализации в Web.config и установка атрибутов culture и uiculture.

0 голосов
/ 12 октября 2011

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

...