Я использую.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" - но он не работал.
помощь будет оценена.
В моем случае я использовал объект StringBuilder для хранения XML файла. свойство AppendLine, похоже, имеет проблемы с синтаксическим анализом по маске даты. После некоторого копания я нашел эту статью, которая предлагает обновить маску https://msdn.microsoft.com/en-us/library/ms172213(v=vs.110).aspx
Единственная проблема заключается в том, что этот XML файл должен был иметь определенный формат даты (маска), поэтому мы проигнорировали проблему. Это, похоже, не было проблемой в нашей сборке "выпуска", но всякий раз, когда мы пытались "отлаживать", оно появлялось. Мы просто нажали "Продолжить", чтобы заставить его, и он прошел.
Если вы можете обновить маску, это может исправить вашу проблему, если вы не можете, попробуйте свой код в режиме "выпуска", без точек останова и посмотрите, висит ли он.