.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 решает эту проблему.