“在商店中找不到指定的对象”异常

Ram*_*h S 2 exchange-server-2007 exchangewebservices

为什么我在请求订阅的帮助下获得创建的事件或通知时会收到异常“在商店中找不到指定的对象”?

EWS SOAP 响应如下所示:

<Trace Tag="EwsResponse" Tid="1" Time="2013-09-27 12:38:43Z" Version="15.00.0516.014">
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
  <t:ServerVersionInfo MajorVersion="8" MinorVersion="3" MajorBuildNumber="83" MinorBuildNumber="4" Version="Exchange2007_SP1" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" />
</soap:Header>
<soap:Body>
  <m:GetItemResponse xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages">
    <m:ResponseMessages>
      <m:GetItemResponseMessage ResponseClass="Error">
        <m:MessageText>The specified object was not found in the store.</m:MessageText>
        <m:ResponseCode>ErrorItemNotFound</m:ResponseCode>
        <m:DescriptiveLinkKey>0</m:DescriptiveLinkKey>
        <m:Items />
      </m:GetItemResponseMessage>
    </m:ResponseMessages>
  </m:GetItemResponse>
</soap:Body>
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

PullSubscription subscription = service.SubscribeToPullNotifications(
                    new FolderId[] { WellKnownFolderName.Inbox }, 1, WaterMark,
                    EventType.NewMail, EventType.Created, EventType.Moved, EventType.Deleted);
WaterMark = subscription.Watermark;

// Initiate the GetEvents method for the new subscription.
GetEventsResults events = subscription.GetEvents();

// Handle the results of the GetEvents method.
foreach (ItemEvent itemEvent in events.ItemEvents)
 {
   switch (itemEvent.EventType)
     {
       case EventType.NewMail:
         Console.WriteLine("New Mail");
         EmailMessage message = EmailMessage.Bind(service, itemEvent.ItemId);
         if (message.Subject.Equals(""))
           {
             break;
           }
         Item item = Item.Bind(service, itemEvent.ItemId);
         RulesApplied(service, message, item);
         break;
       case EventType.Created:
          Console.WriteLine("Created");
          EmailMessage message1 = EmailMessage.Bind(service, itemEvent.ItemId);
          // Here I get the Exception.
          break;
Run Code Online (Sandbox Code Playgroud)

G D*_*son 5

我发现在设置下水印后邮箱所有者移动或删除邮件时会引发此异常。

我相信 ItemEvents 集合包含受订阅事件影响的项目(例如新消息),但并非集合中的所有项目都可能仍然相关 - 例如 ItemId 不再有效,因为它受到了诸如删除。

您可能会发现更频繁的轮询可以在最终用户接触邮件之前捕获该项目,但是在我组织内的一个应用程序中,我们只记录异常,因为邮箱用户可能有特定原因在发送之前移动或删除邮件订阅的应用程序对消息事件采取行动。