6

当面の問題

このC# Windows アプリケーションは、EWS マネージ API 2.0を使用して、ユーザーの予定表に予定を作成します。各予定には、一意の値を持つ拡張プロパティがあります。後で と を使用して予定を検索しFindItemsますItemView

ユーザーは、この検索を初めて実行するときにかなりの遅延を経験します。その後の応答時間は完全に許容されます。

(「初回」は少しあいまいです。ユーザーはその日の後半に再び遅延を経験する可能性があるためです)

// locate ID of appointment where extended property value equals 1234:
var filter = new Ews.SearchFilter.IsEqualTo(extendedPropertyDefinition, 1234);
var view = new ItemView(1, 0);
view.PropertySet = BasePropertySet.IdOnly;
var folder = new FolderId(WellKnownFolderName.Calendar, new Mailbox("..."));
var result = service.FindItems(folder, filter, view);

リモート サーバーはExchange Server 2007 SP1です。

リサーチ

MSDN はいくつかのコメントを検索フォルダーと制限されたビューに関連付けていますが、これらが私たちの状況に当てはまるかどうかはわかりません.

フォルダにビューを適用すると、ストアに検索フォルダが作成されます。検索フォルダーが作成されると、後で使用するためにキャッシュされます。ユーザーが既に存在する検索フォルダーを作成しようとすると、キャッシュされた検索フォルダーが使用されます。これにより、将来の表示がかなり迅速になります。既定では、Exchange はすべての検索フォルダーを無期限にキャッシュするわけではありません。

具体的には EWS に関して:

また、Exchange ストアの検索クエリが初めて発行されると、実行が非常に遅くなり、タイムアウトになる可能性がありますが、それ以降の実行では問題なく応答するという事実に注意することも重要です。これは、ストア検索の実行時に Exchange サーバーで発生するバックエンド プロセスが原因です。

彼らは、不変で動的でないクエリ用の検索フォルダを作成することを提案していますが、クエリは予定ごとに異なるため、このケースには適していないようです。

アプリケーションで、不変のパラメーターの固定セットを持つ特定のクエリが必要な場合は、検索フォルダーを使用できます。[...] 検索フォルダーは、不変で非動的なクエリにのみ役立ちます。

本質的に必要なのは、データベースの用語で言えば、プロパティに「インデックス」を作成し、時間や頻度に関係なく、この特定のプロパティのすべての検索が高速であることを確認することです。

このプロパティを「インデックス化」することは可能ですか? この初期遅延を取り除くために、クライアント側またはサーバー側のいずれかで何かを構成できますか?

4

4 に答える 4

6

私は統合プロジェクトで同じような問題に遭遇しました。何か良い解決策があればいいのですが…

Exchange によってまだインデックスが作成されていないプロパティのインデックスを作成することはできません。予定の数が十分に増えると、それぞれに検索フォルダーを作成することはできません。1 つのフォルダーに検索フォルダーが多すぎると、新しいアイテムがフォルダーに追加されたときにすべての検索フォルダーを更新する必要があるため、さらなる問題が発生します。少なくとも、それは私の理解です。また、Exchange 2007 は、親フォルダーごとに 11 個の動的検索フォルダーに制限されているため、予定の数とアクセス頻度によっては、実行可能性がさらに低くなる可能性があります。既存のインデックス付きプロパティを使用することは、アプリケーションの外部のユーザーによって変更される可能性があるため、実行できない場合があります。作成した予定がアプリケーションからのみアクセスまたは変更できることを保証する何らかの方法がある場合、それは別の話です。

データベース テーブルは良い方法ですが、手遅れになるまで気づかない人もいる可能性があります。ItemId は拡張プロパティにリンクするための当然の選択ですが、ItemId は定数ではありません。これは、他のいくつかに基づいて計算されたプロパティです。アイテムを別のフォルダに移動したり、Service Pack をインストールしたり、時間が経過したりすると変化する可能性があると聞いています。少なくとも最初のものは確認できます。ItemId は、少なくとも追加のチェックなしでは、長期保存には適していません。ItemId と拡張プロパティを保存できる可能性があります。ItemId を使用したバインドが失敗した場合は、拡張プロパティ検索にフォールバックします。バインドが成功した場合は、データベース内の拡張プロパティと照合して一致することを確認します。アイテムが一致しない場合は、アイテムを取得したら ItemId を更新します。会議の返信、転送通知など、予定オブジェクトを超えて作業する必要がありますか?それとも、これは予定表だけに関連していますか?

きれいではありませんが、ある程度妥当な妥協点である必要があります。それでも時折検索することがありますが、ユーザーが予定を別のフォルダーに移動することを決定したり、予定を事前に計画したりしない限り、それらはほとんどないはずです。その場合でも、同期はそれを軽減するのに役立ちます. Exchange へのアップグレードがある場合は、そのテーブルを再作成する準備をしてください。

もちろん、Microsoft が追加のプロパティにインデックスを付ける機能を追加したり、この目的のために Exchange Search のインデックスに空白の文字列フィールドを 1 つまたは 2 つ追加したりしていれば、この問題は発生しませんでした。Appointments および関連オブジェクトの GlobalObjectId プロパティのインデックスは役に立ちますが、残念ながら...いいえ。私は、既存のインデックス付きフィールドを転用するのが好きではありません。それらのすべてが予定に適用できるわけではなく、ユーザーが必須または編集できる傾向があるものもあります。自分が何をしているのかを正確に把握していない限り、これらのフィールドを再利用すると、将来的に予期しない結果が生じる可能性があります。

いずれにせよ、私は EWS/Exchange のすべての問題の専門家であるとは主張していないので、これよりも優れた方法があるかもしれません。一粒の塩でそれを取ります。

于 2013-11-16T01:03:39.663 に答える
1

このスレッドをもう少し読んだ後、拡張プロパティを持つすべてのアイテムではなく、特定のアイテムを探していることがわかりました。申し訳ありませんが、最初の応答でそれをキャッチできませんでした。アイテムを検索するたびにフィルターを更新する必要があるため、検索フォルダーだけでは機能しないことに同意します。これは明らかにかなり高価です (おそらく現在のアプローチよりも悪いでしょう)。私が持っている 1 つのアイデアは、拡張プロパティで並べ替えるビューを作成することです。私は間違っている可能性がありますが、このビューを上記の検索フォルダーに適用できると思います (検索フォルダーとビューを明示的に作成してメールボックスに保存することについて話していることに注意してください。これらは非表示にすることも、OL UI に公開することもできます)。検索フォルダ ツリーの下)。検索フォルダーは、拡張プロパティを持つ予定のみをフィルター処理します。次に、ビューはフォルダーをプロパティ値で並べ替えます。私が ESE の内部について読んでいると、プロパティで並べ替えると、Exchange が ESE にインデックスを作成することを示すコメントがいくつか見られました (今すぐ見つけられたらいいのにと思います)。ESE B-Tree Indexes のセクションは、これを確認しているようです:http://books.google.com/books?id=12VMxwe3OMwC&pg=PA73&lpg=PA73&dq=how+to+create+exchange+ese+indexes&source=bl&ots=D5hJyJIEo5&sig=ppZ6RFJh3PnrzeePRWHFJOwXgeU&hl=en&sa=X&ei=QQ7HUtgggvTbBdjcgfCF#Q6CF&ved=0 how%20to%20create%20exchange%20ese%20indexes&f=false

次に、上で検索フォルダーで使用したのと同じアプローチを使用して、条件に一致する特定のアイテムを見つける必要があります。もちろん、1 つの課題は、Exchange がインデックスを破棄するという問題です (これはおそらく、現在のアプローチで起こっていることです)。おそらく、これが起こらないようにするために、プログラムで検索フォルダーに定期的にアクセスできますか? このリンクは、検索フォルダー/ビューの作成によるパフォーマンスへの影響を理解するのにも役立ちます: http://technet.microsoft.com/en-us/library/cc535025%28EXCHG.80%29.aspx

良い解決策を見つけた場合 (またはこれが機能する場合)、私はそれについて聞くことに非常に興味があります (他の多くの人もそうだと確信しています)。ああ、取引所開発の喜び :-)

于 2014-01-03T20:16:29.963 に答える