現在オフラインです。再接続するためにインターネットの接続を待っています

件名や本文などに無効な制御文字が含まれていると EWS でアイテムを取得する際に System.Xml.XmlException が発生する

現象
Exchange Web Services (EWS) を利用してアイテムを取得する場合、件名や本文などに無効な制御文字が含まれていると以下の例外が発生して取得操作に失敗します。
   System.InvalidOperationException: XML ドキュメント (98,-1122) でエラーが発生しました。   --> System.Xml.XmlException: ' ' (16 進数値 0x01) は無効な文字です。 行 98、位置 -1122 です。

なお、無効な制御文字が含まれていても Outlook や Outlook Web App (OWA) ではアイテムにアクセスすることができます。
原因
EWS の GetItem や FindItem などを利用してアイテムを取得する場合、Exchange Server はアイテムのプロパティに保存されている値をそのまま XML の各要素に割り当ててクライアントにデータを返します。件名や本文などに無効な制御文字が含まれていると XML データにテキスト以外の文字が含まれることになるため、XML Validation を実施するクライアントでは XML データとして不正であると判断してエラーが発生します。
解決方法
.NET Framework から EWS を呼び出す場合、XmlTextReader の Normalization を false に設定することによりアイテムを取得する際に例外が発生しないように制御することができます。Visual Studio で自動生成された Proxy クラスでは Normalization が true に設定されて直接変更することができないため、以下のように自動生成された Proxy クラスをオーバーライドして Normalization を false に変更する必要があります。最後に、これまでアプリケーション内部で使用していた ExchangeServiceBinding を MyExchangeServiceBinding に置換することで本現象を回避することができます。

   public partial class MyExchangeServiceBinding : ExchangeServiceBinding    {       /// <summary>       /// Override the default behavior of the SOAP reader to handle characters which aren't valid in strings       /// </summary>       /// <param name="message"></param>       /// <param name="bufferSize"></param>       /// <returns></returns>       protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)       {           XmlReader retval = base.GetReaderForMessage(message, bufferSize);           XmlTextReader xrt = retval as XmlTextReader;           if (null != xrt)           {               xrt.Normalization = false;           }           return retval;       }   }

詳細
この問題の詳細については、以下の Microsoft TechNet Web サイトを参照してください。

   XML Validation Errors When You Submit Exchange Web Services Requests
   http://technet.microsoft.com/ja-jp/library/gg585107(v=exchg.80).aspx
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2774517 - 最終更新日: 10/22/2012 06:46:00 - リビジョン: 1.0

Microsoft Exchange Server 2010 Enterprise, Microsoft Exchange Server 2010 Service Pack 1, Microsoft Exchange Server 2010 Service Pack 2, Microsoft Exchange Server 2010 Standard

  • kbdeployment kbhowto kbexpertiseadvanced KB2774517
フィードバック