На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Проблема при передаче DateTime из Web сервиса asmx
    Друзья!
    Вот какой вопрос.
    Веб метод возвращает DataTable с двумя MSSQL полями DateTime.
    Если смотреть на вывод со стороны сервиса, то получаются
    следующие значения:
    From:25.10.2008 0:00:00, To: 26.10.2008 23:00:00
    При получении их на клиенте имеем:
    From:24.10.2008 23:00:00, To: 26.10.2008 23:00:00
    В XML, кот. отдает сервис вот такие строки
    ExpandedWrap disabled
      <Table diffgr:id="Table1" msdata:rowOrder="0">
       <С>2008-10-25T00:00:00+05:00</С>
       <По>2008-10-26T23:00:00+04:00</По>
      </Table>

    Почему это может быть?
    Винда на сервере английская с русским языком по умолчанию
    На клиенте русская XP SP3.
    Такое чувство, что что-то с часовыми поясами или временем UTC.
      В полях есть свойства DateTimeMode, вот его надо правильно выставить.
        Может быть Kind? Уже игрался.
        При передаче из сервиса
        Mode1: Unspecified, Mode2: Unspecified
        При приеме на клиенте то же самое.
        Что выставлять?

        Добавлено
        Итак. На клиенте

        ExpandedWrap disabled
                      DTNewRasp.Columns.Clear();
                      DTNewRasp.Columns.Add(new DataColumn("С", Type.GetType("System.DateTime")));
                      DTNewRasp.Columns.Add(new DataColumn("По", Type.GetType("System.DateTime")));
                      DTNewRasp.Columns[0].DateTimeMode = DataSetDateTime.Local;
                      DTNewRasp.Columns[1].DateTimeMode = DataSetDateTime.Local;
                      DTNewRasp = service.ПолучитьРасписание(TNumber, DateFrom, DateTo);


        После вызова метода обе колонки имеют режим UnspecifiedLocal.
        Править свойство DateTimeMode можно только когда таблица не имеет данных.
        Править на сервере перед отправкой не бред?
        Сообщение отредактировано: gmaker -
          А где вы выставляли Unspecified ? И зачем на клиенте Local ставите?
          Везде должно быть Unspecified.
          Тогда смещения не будет.

          Добавлено
          Собственно а зачем вообще на клиенте таблицу создаете? Это лишнее.
            Я решил пойти обходным путем.
            Все эти манипуляции ни к чему хорошему не привели.
            Получаю на сервере DataTable, преобразую полученный DateTime в long методом ToBinary()
            и в этом виде передаю клиенту.
            На клиенте из long получаю DateTime и это ровно те же значения
            что были на сервере перед отправкой.
            Или нужно какие-то манипуляции с таблицей делать перед отправкой из сервиса?
              В сервисе поле должно быть как Unspecified вот и все манипуляции.
              А все ваши манипуляции с созданием таблицы на клиенте и попытки управлять свойствами этих ненужных сущностей от лукавого.
                После вызова в сервисе DataAdapter.Fill(dt)
                поля в dt имеют тип UnspecifiedLocal!
                В этом случае сериализация вызывает СМЕЩЕНИЕ.
                Если, как Вы пишите тип указан как Unspecified,
                то при сериализации смещения не происходит.
                Но вот как его указать?

                Что сделал. Создал перед вызовом метода Fill
                таблицу с 2 колонками руками внутри сервиса.
                Указал DateTimeMode = DataSetDateTime.Unspecified
                для обоих колонок. Вызвал Fill.
                Вернул получившуюся таблицу клиенту.
                Даты появились как надо.
                Сообщение отредактировано: gmaker -
                  В дизайнере, например.

                  Добавлено
                  Таблицы надо делать и настраивать заранее, в быстром мелком тесте - еще куда ни шло, можно и не создавать, а в боевых условиях за такое ноги отрывают, и по самы уши. :)
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0269 ]   [ 17 queries used ]   [ Generated: 19.03.24, 08:08 GMT ]