C # - DateTimeInvalidLocalFormat

1

Я использую.NET 4.0 и использую класс с ChannelSink, ServerSink и ClientSink. Программа была создана для доставки сообщений между двумя интерфейсами (удаленными и локальными). У меня есть 4 вида сообщений.

3 Сообщения отлично работают (они не содержат элементов данных DateTime).

У меня возникла проблема: в определенном виде сообщения (которое содержит члены данных DateTime) всякий раз, когда я пытаюсь доставить сообщение, приемник пытается десериализовать сообщение, но с ошибкой появляется следующее сообщение:

ОШИБКА:

Управляемый помощник по отладке "DateTimeInvalidLocalFormat" обнаружил проблему в "C:\Program Files\IIS Express\iisexpress.exe".

Дополнительная информация: UTC DateTime преобразуется в текст в формате, который является правильным только для локальных времен. Это может произойти при вызове DateTime.ToString с использованием спецификатора формата "z", который будет включать в себя локальное смещение часового пояса на выходе. В этом случае используйте спецификатор формата "Z", который обозначает время UTC, или используйте строку формата "o", которая является рекомендуемым способом сохранения DateTime в тексте. Это также может произойти при передаче DateTime для сериализации XmlConvert или DataSet. Если вы используете XmlConvert.ToString, перейдите в XmlDateTimeSerializationMode.RoundtripKind, чтобы сериализовать правильно. Если вы используете DataSet, установите DateTimeMode в объекте DataColumn в DataSetDateTime.Utc.

Всякий раз, когда я отключу помощника по управлению отладкой, я получаю это сообщение:

System.Security.SecurityException: запрос не выполнен

Трассировка стека сервера: в System.Array.InternalCreate(Void * elementType, Int32 rank, Int32 * pLengths, Int32 *

pLowerBounds) в System.Array.CreateInstance (Тип elementType, Int32 Length) в System.Runtime.Serialization.Formatters.Soap.ObjectReader.ParseArray(ParseRecord pr) в System.Runtime.Serialization.Formatters.Soap.ObjectReader.ParseObject(ParseRecord pr ) в System.Runtime.Serialization.Formatters.Soap.ObjectReader.Parse(ParseRecord pr) System.Runtime.Serialization.Formatters.Soap.SoapHandler.StartChildren() в System.Runtime.Serialization.Formatters.Soap.SoapParser.ParseXML() System.Runtime.Serialization.Formatters.Soap.ObjectReader.Run() System.Runtime.Serialization.Formatters.Soap.ObjectReader.Deserialize(HeaderHandler, ISerParser

serParser) System.Runtime.Serialization.Formatters.Soap.SoapFormatter.Deserialize(Stream serializationStream,

Обработчик HeaderHandler) в System.Runtime.Remoting.Channels.CoreChannel.DeserializeSoapRequestMessage (поток

inputStream, Header [] h, Boolean bStrictBinding) в System.Runtime.Remoting.Chanels.SoapServerFormatterSink.ProcessMessage

(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream

requestStream, IMessage & responseMsg, ITransportHeaders & responseHeaders, Stream и responseStream)

Исключение отменено в [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage

retMSg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData & msgData, тип Int32). , (некоторые из моих файлов). Не удалось выполнить действие: Demand Тип первого отказа, который был неудачен: System.Security.PermissionSet Требовалось:

Разрешены только разрешенные разрешения:

Метод, вызвавший этот сбой: System.Runtime.Remoting.Channels.ServerProcessing ProcessMessage (System.Runtime.Remoting.Channels.IServerChannelSinkStack, System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Channels.ITransportHeaders, System.IO.Stream, System.Runtime.Remoting.Messaging.IMessage ByRef, System.Runtime.Remoting.Channels.ITransportHeaders ByRef, System.IO.Stream ByRef)

Который, я думаю, не имеет к этому никакого отношения, потому что другие 3 вида сообщений работают отлично. Более того, всякий раз, когда я вызываю раковину, не доставляя сообщение (только для метода заглушки), он работает. Мой вопрос: что делать? Я пытаюсь добавить к тегу [XmlAttribute] DataType = "date" - но он не работал.

помощь будет оценена.

  • 0
    Вы получили где-нибудь с этой проблемой? Я сталкиваюсь с аналогичной проблемой вызова веб-службы Java с помощью кода .net, и проблема заключается в преобразовании даты и времени в дату и время UTC.
Теги:
soap
serialization
client-server

1 ответ

0

В моем случае я использовал объект StringBuilder для хранения XML файла. свойство AppendLine, похоже, имеет проблемы с синтаксическим анализом по маске даты. После некоторого копания я нашел эту статью, которая предлагает обновить маску https://msdn.microsoft.com/en-us/library/ms172213(v=vs.110).aspx

Единственная проблема заключается в том, что этот XML файл должен был иметь определенный формат даты (маска), поэтому мы проигнорировали проблему. Это, похоже, не было проблемой в нашей сборке "выпуска", но всякий раз, когда мы пытались "отлаживать", оно появлялось. Мы просто нажали "Продолжить", чтобы заставить его, и он прошел.

Если вы можете обновить маску, это может исправить вашу проблему, если вы не можете, попробуйте свой код в режиме "выпуска", без точек останова и посмотрите, висит ли он.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню