.Net / C# DateTime поле изменяется при переходе от удаленного MarshalByRefObject к ServicedComponent для дат, которые являются изменениями времени DayLight

У меня есть удаленно размещенный объект, который настроен как SingleCall. Это объект удаленного взаимодействия старого стиля.Net, который настроен как RemotingConfiguration.Configure (remotingConfigPath, false). Этот объект получает поле DateTime в DataSet без проблем и передает его в метод ServicedComponent (COM+), помеченный как [AutoComplete]. С точки зрения вызова поле в порядке. Теперь, как только метод [AutoComplete] получает DateTime, он смещается на 1 час. Это, безусловно, сдвигается.NET Framework. Между ними нет кода пользователя. Я думаю, что сдвиг происходит в определенные даты, которые являются датами смены летнего времени.

Это должно быть что-то с сериализацией даты, которая должна происходить, когда она проходит через AppDomain. Компонент Like Serviced использует собственный часовой пояс и преобразует полученную дату в эту зону. Но странная вещь заключается в том, что, если я вызываю ServicedComponent напрямую, не настраивая его для удаленного взаимодействия.Net, никаких изменений даты не происходит. Обслуживаемый компонент находится в процессе. Клиент и сервер находятся на одном компьютере с TimeZone GMT+2 и региональными настройками, установленными на Турция / Турецкий, и.net culture, установленными на tr-TR для CurrentUICulture и CurrentCulture на стороне клиента. Пожалуйста, помогите решить проблему Спасибо заранее

  public class ProfileSystem : MarshalByRefObject
 {
     public void SaveProfile(Guid sessionId, HotelAToZ.SystemTypes.Profile2.ProfileData data) 
    {
         //This is in remoting object DateTime is received  normally here
         //Header is a property which just returns the first row of DataSet. Actually only one row in dataset
        //throw new ApplicationException(data.Header.BirthDay.ToString());
        new Reservation.ReservationSC().SaveProfile(sessionId, data);
    }
}

 [Transaction(TransactionOption.Required)]
 public class ReservationSC : ServicedComponent
 {
 //This is in ServicedComponent
  [AutoComplete]
    public void SaveProfile(Guid sessionId, HotelAToZ.SystemTypes.Profile2.ProfileData data) 
    {
         //data.Header.BirthDay is shifted here
         //throw new ApplicationException(data.Header.BirthDay.ToString());
        new HotelAToZ.DataAccess.Profile2.ProfileAccess().SaveProfile(sessionId, data);
    }
 }

1 ответ

Проблема была вызвана ошибкой, описанной в аналогичной проблеме: http://social.msdn.microsoft.com/Forums/en-US/19706927-ab22-44ee-ad89-9d005f7ea29f/binary-serialization-of-datasets-bug-with-datetimecolumns?forum=adodotnetdataproviders

Таким образом, установка свойства DateTimeMode объекта DataColumn в DataSetDateTime.Unspecified решает эту проблему.

Другие вопросы по тегам