Exchange の通知サブスクリプション、メールボックス イベント、および EWS

Exchange の通知サブスクリプションと EWS のメールボックス イベントについて説明します。

EWS マネージ API と Exchange Web Services (EWS) の両方を使用して、メールボックス、またはメールボックスの 1 つ以上のフォルダーでイベントが発生したときに通知を受信するようサブスクライブできます。 ストリーミング通知、プル通知、プッシュ通知の 3 つのサブスクリプションの種類があります。 これらのサブスクリプションの種類は、それぞれ異なる手法を使用して通知を受信または取得します。

通知を取得する場合のオプション

EWS には、独立して動作し、クライアントにサーバーの変更を通知する 3 種類のサブスクリプションが含まれています。 どのサブスクリプションの種類を選択しても、最終的にすべて同じ通知にアクセスすることになり、取得方法が異なるだけです。

表 1. サブスクリプションの種類

オプション 説明 適切かどうか
ストリーミング通知
特定の期間開いたままの状態の接続を経由した、サーバーから送信される通知。
ストリーミング通知は通常、ほとんどのアプリケーションで推奨されます。 プル通知およびプッシュ通知と同様のもので、両方のメリットを併せ持っています。 通知サブスクリプションを確立した後、接続が最大で 30 分間開いたままになり、それによってサーバーがクライアントにプッシュ通知を行えるようになります。 プル サブスクリプションのように更新を要求する必要はなく、プッシュ サブスクリプションのように Web サービス リスナー アプリケーションを作成する必要もありません。
プル通知
クライアントによって要求 (またはプル) される通知。
プル通知は通常、クライアントがネットワークに確実に接続されているわけでない疎結合クライアントに最も適しています。 プル通知は、クライアントがサーバーに頻繁に要求を送信して通知を受信するため、クライアントとサーバーの間の余分なトラフィックを確立してしまうことがあり、すべての要求が受信通知になるわけではありません。
プッシュ通知
コールバック アドレスを経由し、サーバーによってクライアント側の Web サービスに送信 (またはプッシュ) される通知。
一般的に、プッシュ通知はプル通知よりも通知の遅延が小さく、サーバーのアクセスが信頼性の高いもので、クライアントが IP アドレス指定可能な密結合のクライアントに適しています。 ただし、プッシュ通知は Exchange 2010 でストリーミング通知が登場して以来、使用されなくなっています。 可能であれば、今後はプッシュ通知ではなく、ストリーミング通知を使用することをお勧めします。 プッシュ通知ではリスナー アプリケーションを作成する必要があり、そこに通知がプッシュされます。 この点はプル通知に比べて少し利点があり、書き込みのトラフィックが減少しますが、別のアプリケーションを必要とすることでオーバーヘッドが増加します。

サブスクライブできる EWS のイベント

クライアントがサブスクライブする EWS イベントの種類は、EWS マネージ APIの EventType 列挙型、または EWS の EventType 要素によって定義されます。 次の EWS イベントがサブスクリプションに利用できます。

  • NewMail – 受信トレイに新しいメッセージが到着しました。

  • Deleted - メッセージが受信トレイから物理的に削除されました。 削除されたアイテムの通知に関する詳細については、「Exchange の EWS を使用するアイテムの削除」 と 「Exchange での EWS の削除に関連するメールボックス イベントのプル通知」を参照してください。

  • Modified – アイテムまたはフォルダーが変更されました。

  • Moved – アイテムまたはフォルダーが移動されました。

  • Copied – アイテムまたはフォルダーがコピーされました。

  • Created – アイテムまたはフォルダーが作成されました。

  • FreeBusyChanged - ユーザーの空き時間情報が変更されました。

EWS イベントの別の種類である Status イベントは、EventType 要素によって定義されますが、このイベントにはサブスクライブしません。 その代わり、ストリーミング通知とプッシュ通知のみに関するクライアントの状態を確認するために、そのイベントはサーバーによって送信されます。 クライアントはこのイベントに応答する必要があります。または、クライアントはタイムアウトします。

たいていの場合、1 つのユーザー アクションで、複数の通知が作成されます。 このことを示すため、次の図では、いくつかの一般的なシナリオとそれぞれに作成された通知を図示しています。 クライアントの設定によって受信する通知は変わってくるので、これは構成オプションと結果の通知すべてを網羅したリストではありません。

図 1. 通知サブスクリプションによって返されるイベントの種類

新規電子メールの受信、新規フォルダーの作成、フォルダーの移動など一般的なユーザー シナリオで送信される通知を示した表。

図 1 では、通知の処理が簡素化されています。 実際には、単一のユーザーのアクションに対して複数の通知 (同じ種類の複数の通知も可) を作成できます。 たとえば、フォルダーの移動操作では、変更されたフォルダー用に 1 つ、古い親フォルダー用に 1 つ、新しい親フォルダー用に 1 つ、で合わせて 3 つのフォルダー イベントが作成されます。 1 回の操作で多数のイベントが発生する可能性があるため、同期処理には数秒の待機時間を作成し、操作の途中ではなく、アクションが完了したときにのみ同期するようにします。

また、各ユーザーが選択した構成設定によって、作成される通知が変わってくることを認識しておくことも重要です。 たとえば、新しい会議出席依頼を受信した場合、アイテムを読み上げる前でさえ、一部のユーザーの空き時間情報データは自動的に更新され、FreeBusyChanged イベントが作成されます。 また、空き時間情報データが更新されず、会議を承諾した後まで FreeBusyChanged イベントが作成されないユーザーもいます。 これらの設定は、サーバーによって作成される通知に大きな影響を与える可能性があります。

EWS の通知のしくみ

EWS 通知はサブスクリプションベースで処理されます。 通常、メールボックスごとに 1 つのサブスクリプションがあり、メールボックス サブスクリプション内の一部またはすべてのフォルダーをサブスクライブできます。 サブスクライブする通知の種類 (ストリーミング、プル、プッシュ) と受信するイベントの種類 (NewMail、Created、Deleted、Modified など) を決定し、サブスクリプションを作成します。 EWS イベントは、メールボックス サーバーからクライアントに非同期的に送信されます。 (履歴レッスン: イベントは Exchange 2007 では同期的であり、イベントは Exchange 2010 のクライアント アクセス サーバーに格納されますが、それ以上は保存されません)。

サブスクリプションの種類によって、クライアントに通知が送信される方法が異なります。 このセクションでは、サブスクリプションの種類ごとのしくみについて詳細に説明します。

EWS のストリーミング通知

ストリーミング通知は、ストリーミング サブスクリプションの接続を開いているサーバーの分岐 get 要求に依存するため、接続がアクティブな間に発生するイベントは、クライアントにすぐにストリーミングされます。 1 つの接続の間に複数の通知を送信でき、接続は一定時間が経過するまで開いている状態が維持されます (最大 30 分)。 接続が切断されると、クライアントは分岐 get 要求をもう一度送信します。 図 2 では、ストリーミングのサブスクリプションとストリーミング通知のしくみを示します。

図 2. ストリーミング通知の概要

ストリーミング通知の動作方法を示す図。ストリーミング通知をセットアップするには、次を実行します。1. サブスクライブします。2. 接続を開きます。3. イベントを待機します。4. イベントを受信し、3 と 4 を繰り返します。5. 接続を閉じるか、そのままにします。6. サブスクリプションを解除するか、タイムアウトします。

ストリーミングの通知を作成する方法の詳細については、「Exchange での EWS を使用したメールボックス イベントに関するストリーム通知」を参照してください。

EWS プル通知

プル通知は、クライアントが管理する間隔で通知を要求するクライアントに依存します。 これにより、通知のない GetEvents 応答が発生することがあります。 図 3 は、プル サブスクリプションとプル通知のしくみを示しています。

図 3. プル通知の概要

プル通知の動作方法を示す図。プル通知をセットアップするには、次を実行します。1. サブスクライブします。2. GetEvents を送信します。3. 応答を受信し、2 と 3 を繰り返します。4. 接続を閉じるか、そのままにします。5. サブスクリプションを解除するか、タイムアウトします。

プル通知を作成する方法の詳細については、「Exchange での EWS を使用したメールボックス イベントに関するプル通知」を参照してください。

EWS プッシュ通知

プッシュ通知は、通知をクライアントにプッシュするサーバーに依存します。 通知がある場合にのみトラフィックがあります。 図 4 は、プッシュ サブスクリプションとプッシュ通知のしくみを示しています。

図 4. プッシュ通知の概要

プッシュ通知の動作方法を示す図。プッシュ通知をセットアップするには、次を実行します。1. リスナーを作成します。2. サブスクライブします。3. イベントを待機します。4. イベントを受信します。5. [OK] 応答を送信し、3、4、および 5 を繰り返します。6. サブスクリプションを解除するか、タイムアウトします。

Exchange 2010 を使用したプッシュ通知を利用している場合、ストリーミング通知を利用するようアプリケーションをアップグレードすることを検討してください。こうすると、イベントを受信する別のアプリケーションが必要ありません。

通知をサブスクライブする方法

作成するサブスクリプションの種類に応じて、通知のサブスクライブのために選択する様々なオプションがあります。

表 2. 通知をサブスクライブするための操作とメソッド

サブスクリプションの種類 EWS 操作 EWS マネージ API メソッド 目的
ストリーミング
サブスクライブ操作
ExchangeService.BeginSubscribeToStreamingNotifications メソッド
ExchangeService.BeginSubscribeToStreamingNotificationsOnAllFolders メソッド
ExchangeService.SubscribeToStreamingNotificationsOnAllFolders メソッド
ストリーミング通知をサブスクライブする要求を作成します。
プル
サブスクライブ操作
ExchangeService.BeginSubscribeToPullNotifications メソッド
ExchangeService.BeginSubscribeToPullNotificationsOnAllFolders メソッド
ExchangeService.SubscribeToPullNotifications メソッド
ExchangeService.SubscribeToPullNotificationsOnAllFolders メソッド
プル通知をサブスクライブする要求を作成します。
プッシュ
サブスクライブ操作
ExchangeService.BeginSubscribeToPushNotifications overloaded メドッド
ExchangeService.BeginSubscribeToPushNotificationsOnAllFolders overload メソッド
ExchangeService.SubscribeToPushNotifications overloaded メソッド
ExchangeService.SubscribeToPushNotificationsOnAllFolders overloaded メソッド
プッシュ通知をサブスクライブする要求を作成します。

EWS のイベントを取得する方法

サブスクリプションが作成されると、実際のイベントがクライアントに送信される方法は、サブスクリプションの種類によって異なります。

ストリーミング通知を行うためにはストリーミング サブスクリプション接続を作成する必要があり、作成するとサブスクリプションが接続に追加されます。 このプロセスの詳細は、「Exchange での EWS を使用したメールボックス イベントに関するストリーム通知」で確認できます。

プル通知では、サブスクリプションが作成されたときにサブスクリプション オブジェクトが初期化されるため、 GetEvent メソッドまたは操作を呼び出してサーバーからイベントを取得するだけで十分です。 この詳細は、「Exchange での EWS を使用したメールボックス イベントに関するプル通知」で確認できます。

以下の表には、イベントを取得するために必要な操作とクラスが一覧表示されています。

表 3. 接続を作成し、イベントを取得するための要素とクラス

サブスクリプションの種類 EWS 操作 EWS マネージ API メソッド 目的
ストリーミング
GetStreamingEvents の操作
StreamingSubscriptionConnection.AddSubscription メソッド
イベントが発生したときに応答する分岐 get 要求をサーバーで作成します。
プル
GetEvents 操作
PullSubscription.GetEvents メソッド
サーバーからプル通知イベントを取得します。
プッシュ
該当なし。
該当なし。
プッシュ通知は、Web サービスのリスナー (サブスクリプション要求で指定されたコールバック URL) に自動的に送信されます。 追加のメソッドまたは操作を呼び出す必要はありません。

通知をアンサブスクライブする方法

次の表は、サブスクリプションの種類ごとにアンサブスクライブする方法を示しています。

表 4. 通知へのサブスクライブを解除するための操作とメソッド

サブスクリプションの種類 EWS EWS Managed API
ストリーミング
Unsubscribe 操作
StreamingSubscription.BeginUnsubscribe メソッド
StreamingSubscription.EndUnsubscribe メソッド
StreamingSubscription.Unsubscribe メソッド
プル
Unsubscribe 操作
PullSubscription.BeginUnsubscribe メソッド
PullSubscription.EndUnsubscribe メソッド
PullSubscription.Unsubscribe メソッド
プッシュ
SendNotificationResponseMessageStatusFrequency 要素で Unsubscribe を返します
該当なし。 代わりにサブスクリプションをタイムアウトさせることができます。

または、各サブスクリプションをタイムアウトさせることができます。

表 5。 サブスクリプションのタイムアウト

サブスクリプションの種類 EWS でのタイムアウトの値 EWS マネージ API でのタイムアウトの値 タイムアウトの処理
ストリーミング
ConnectionTimeout 要素
StreamingSubscriptionConnection コンストラクターの lifetime パラメーター
EWS マネージ API では、タイムアウト値が経過した後に、OnDisconnect イベントが発生します。 StreamingSubscriptionConnection.Open メソッドが呼び出されないと、接続は終了します。
EWS では、タイムアウト値が経過した後に、GetUserConfigurationResponse メッセージが Closed の ConnectionStatus 値を返します。
プル
Timeout 要素
SubscribeToPullNotification メソッドの timeout パラメーター
タイムアウト値が経過した後、サーバーはサブスクリプションを削除します。
プッシュ
StatusFrequency 要素
SubscribeToPushNotification メソッドの frequency パラメーター
サーバーがプッシュ通知または状態の ping への応答を受信しない場合は、通知の送信を数回再試行してから、通知の送信を停止します。 詳細については、「StatusFrequency」をご覧ください。

サブスクリプションの制限について

社内展開では、調整ポリシーの EwsMaxSubscriptions 調整パラメーターを使用して、ユーザーごとのサブスクリプションの数を制限することができます。 このポリシーは、すべてのユーザー、または特定のユーザーに適用できます。 EwsMaxSubscriptions 調整ポリシーは、Exchange Online では構成できません。

このセクションの内容

関連項目