EWS マネージ API を使用して、CRM を Exchange サーバーと同期します。EWS Mangage API 1.1 を使用している限り、すべてが完璧に機能しました。現在、Api 2.0 (Dll バージョン: 15.0.516.14) に更新しましたが、別のスレッドから同じフォルダーにバインドし、その理由がわからない場合、ArgumentException が発生します。
例外を発生させるサンプルコードは次のとおりです。
private void TestAsyncFolderGet()
{
try
{
ExchangeService service = this.GetService();
Parallel.For(0, 20, (i) =>
{
Folder fo = Folder.Bind(service, WellKnownFolderName.Inbox);
});
}
catch (Exception ex)
{
this.State = "Failed: " + ex.Message;
}
}
private ExchangeService GetService()
{
ExchangeService result = new ExchangeService(ExchangeVersion.Exchange2010);
result.AutodiscoverUrl("test@foo.com");
return result;
}
私の本当のシナリオは、プルサブスクリプションを使用して変更されたアイテムを取得し、変更を非同期に処理することです。これを行っている間、親フォルダーにバインドして情報を取得しています。
例外を回避するのを手伝ってくれる人はいますか?
スタックトレースと例外情報:
System.ArgumentException: 同じキーを持つアイテムが既に追加されています。
Microsoft.Exchange.WebServices.Data.ExchangeService.FindFolders (FolderId parentFolderId、FolderView ビュー)で System.Collections.Generic.Dictionary 2.Insert(TKey key, TValue value, Boolean add)
at Microsoft.Exchange.WebServices.Data.ExchangeServiceBase.SaveHttpResponseHeaders(WebHeaderCollection headers)
at Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.ReadResponse(IEwsHttpWebResponse response)
at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalFindFolders(IEnumerable
1 parentFolderIds、SearchFilter searchFilter、FolderView ビュー、ServiceErrorHandling errorHandlingMode)