Обработка незаконных значений XML при чтении писем с EWS

У нас есть приложение, которое использует 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

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

Ответ 1

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

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

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

Или найдите одну из наиболее распространенных библиотек дезинфекции XML.