Обработка недопустимых значений XML при чтении электронных писем с помощью EWS - PullRequest
10 голосов
/ 27 июля 2011

У нас есть приложение, которое использует StreamingSubscriptionConnection для чтения каждого электронного письма, которое отправляется на определенный почтовый ящик. Проблема, с которой я сталкиваюсь несколько раз в день во время разработки, получает исключение {"'{square character}', hexadecimal value 0x1F, is an invalid character. Line 1, position 1."}.

Вот трассировка стека:

   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
   at System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String[] args)
   at System.Xml.XmlTextReaderImpl.ThrowInvalidChar(Int32 pos, Char invChar)
   at System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars)
   at System.Xml.XmlTextReaderImpl.ParseText()
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlTextReaderImpl.Read()
   at Microsoft.Exchange.WebServices.Data.EwsXmlReader.Read()
   at Microsoft.Exchange.WebServices.Data.EwsXmlReader.Read(XmlNodeType nodeType)
   at Microsoft.Exchange.WebServices.Data.EwsXmlReader.InternalReadElement(XmlNamespace xmlNamespace, String localName, XmlNodeType nodeType)
   at Microsoft.Exchange.WebServices.Data.EwsXmlReader.ReadStartElement(XmlNamespace xmlNamespace, String localName)
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ReadResponse(EwsServiceXmlReader ewsXmlReader)

Как безопасно читать электронные письма с EWS, содержащие недопустимые символы?

После долгих поисков кажется, что было возможно исправить эту проблему с помощью более старых версий EWS API. Однако в последней версии управляемого API, похоже, никто не нашел исправления.

Это кросс-пост от http://social.technet.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/22863099-1d93-47ac-a11b-08c6bf7facea.

Мне снова удалось получить исключение, и вот полная трассировка стека и то, что Exchange превращает в уведомление.

Я использую Exchange 2010 SP1.

EWS Notification Exception

Редактировать: я оживляю этот вопрос, так как он вызывает у меня серьезные проблемы, и в первоначальном вопросе эта проблема четко изложена. Я ищу решения на стороне клиента, которые изменяют поведение API Managed EWS для фильтрации недопустимых символов из XML и исключения исключений. Исправления сервера Exchange вряд ли будут возможны, если только они не являются простыми изменениями конфигурации. Мое программное обеспечение будет работать на клиентских серверах Exchange, которые я не контролирую.

1 Ответ

1 голос
/ 12 марта 2014

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

Эта программа будет делать следующее:

Вы должны быть в состояниидля безопасной замены всех непечатаемых символов ниже US-ASCII 32 такой escape-последовательностью, за исключением '\ r', '\ n' и '\ t'.Однако вам также необходимо убедиться, что вы никогда не повредите XML-файлы и что измененные XML-файлы все еще могут использоваться любой системой, использующей их.

Или искать одну из более распространенных библиотек дезинфицирующего средства XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...