2

プル サブスクリプションを使用して作成されたイベントまたは通知を取得すると、「指定されたオブジェクトがストアに見つかりませんでした」という例外が発生するのはなぜですか?

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>

これは私のコードです:

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

1 に答える 1

5

この例外は、低いウォーターマークが設定された後にメールボックスの所有者によってメッセージが移動または削除されたときにスローされることがわかりました。

ItemEvents コレクションには、サブスクライブされたイベント (新しいメッセージなど) の影響を受けるアイテムが含まれていると思いますが、コレクション内のすべてのアイテムがまだ関連しているわけではありません。消去。

より頻繁にポーリングすると、エンド ユーザーがメッセージに触れる前にアイテムをキャッチできる場合がありますが、私の組織内のアプリケーションでは、メールボックス ユーザーがメッセージを移動または削除する前に特定の理由がある可能性が高いため、例外をログに記録するだけです。サブスクライブしたアプリがメッセージ イベントに作用しました。

于 2013-10-25T12:48:54.367 に答える