使用EWS阅读电子邮件时处理非法XML值

时间:2011-07-27 12:12:34

标签: c# xml exchangewebservices

我们有一个应用程序使用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

编辑:我正在复兴这个问题,因为它引起了我严重的问题,原始问题清楚地说明了问题。我正在寻找修改Managed EWS API行为的客户端解决方案,以便从XML中过滤无效字符并避免异常。 Exchange服务器修复程序不太可能是一个选项,除非它们是简单的配置更改。我的软件将针对我无法控制的客户Exchange服务器运行。

1 个答案:

答案 0 :(得分:1)

一般的解决方法是编写一个实用程序来监视收件箱文件夹作为后台进程,如果无法解决接收无效XML文件的问题

该计划将执行以下操作:

除了'\ r','\ n'和'\ t'之外,您应该能够安全地将non-printable 32下的所有US-ASCII字符替换为这样的转义序列。但是,您还必须确保不会损坏XML文件,并且仍然可以使用已更改的XML文件,无论系统使用它们。

或者寻找一个更常见的XML清理程序库。