Exchange失去连接时Outlook事件不会触发

时间:2012-09-26 15:48:29

标签: c# vsto ms-office outlook-addin outlook-2007

我们最近发现了 Outlook 2007 事件的问题,导致它在Exchange连接丢失然后恢复时不会触发事件。如果您发生attach a listenerFolder.Items.ItemAdd事件,则在Exchange从离线切换到在线后,事件将断开连接。为了重现这一点 - 我们移除了以太网电缆,以模拟短暂的连接丢失。

如果您不能保证在Exchange连接中断时触发事件,这实际上很难构建插件 - 在远程办公室操作时尤其常见。我们没有使用缓存交换模式。

有没有人对他们是一个变通方法,或者如何知道我们何时需要重新建立我们的事件监听器有任何反馈?使用缓存交换模式解决方案? 还是certain events which you just can't use reliably

doesn't appear to be an event trigger for when Exchange connectivity is lost。也许这里唯一的解决方法是使用某种计时器来实现可靠的事件行为。

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; 
  }
}

1 个答案:

答案 0 :(得分:4)

对此问题进行疑难解答后,发现在您与Exchange失去连接后,某些事件未重新建立Application.Explorers.NewExplorerApplication.Inspectors.NewInspector等事件不受Exchange连接的影响,但Folder.Items.ItemAdd是。Folder。也许这是由于MAPIFolder.Items继承了since we don't have an event to tell us when Exchange is unavailable

重新建立事件触发器的唯一解决方案是定期重新连接事件( NewInspector )或在用户启动的操作(例如{{3})期间重新附加事件}或MailItem.Send

MSDN Forums recommends you don't use the ItemAdd event仅用于通过用户界面。