3

最近、 Outlook 2007のイベント処理で、Exchange 接続が失われた後に回復したときにイベントがトリガーされないという問題があることに気付きました。イベントにリスナーをアタッチすると、Folder.Items.ItemAddExchange がオフラインからオンラインに切り替わった後、イベントが切断されます。これを再現するために、イーサネット ケーブルを外したり外したりして、短い接続損失をシミュレートしました。

これにより、Exchange 接続が停止したときにイベントがトリガーされることを保証できない場合、プラグインの構築が本当に困難になります。これは、リモート オフィスから操作している場合に特に一般的です。キャッシュ交換モードは使用していません。

回避策であるかどうか、またはイベント リスナーをいつ再確立する必要があるかを知る方法について、フィードバックはありますか? Exchange キャッシュ モードを使用することは解決策ですか? または、確実に使用できない特定のイベントがありますか?

Exchange 接続が失われたときのイベント トリガーはないようです。おそらく、ここでの唯一の回避策は、信頼できるイベント動作のためにある種のタイマーを使用することです。

public partial class ThisAddIn
{
  Outlook.Items sentItems;      
  private void ThisAddIn_Startup(object sender, System.EventArgs e)
  {
    Outlook.Folder sentFolder = ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);
    sentItems = sentFolder.Items;
    sentItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(SentItems_ItemAdd);
  }
  void SentItems_ItemAdd(object Item)
  { // breakpoint never hit after Exchange connectivity is lost
    Outlook.MailItem mailItem = Item as Outlook.MailItem; 
  }
}
4

1 に答える 1

4

この問題のトラブルシューティングを行った後、Exchange との接続が失われた後に再確立されない特定のイベントがあることが判明しました。Application.Explorers.NewExplorerやなどのイベントApplication.Inspectors.NewInspectorは、Exchange 接続の影響を受けませんが、影響を受けFolder.Items.ItemAddます。おそらく、これは Folderの の継承によるものMAPIFolder.Itemsです。

イベント トリガーを再確立するための唯一の解決策は、定期的にイベントを再接続するか ( Exchange が利用できない場合に通知するイベントがないためNewInspector)、またはなどのユーザー開始アクション中にイベントを再接続することMailItem.Sendです。

ItemAddMSDN フォーラムでは、UI 経由での使用のみを目的としてイベントを使用しないことをお勧めします。

于 2012-09-26T20:00:54.267 に答える