Exchange の EWS スキーマのバージョン
EWS スキーマ、それと連動するアプリケーションの設計方法、ならびに各スキーマ バージョンで使用できる機能、およびスキーマと Exchange サービスのバージョンとの関係について説明します。
EWS スキーマは、Exchange に送信でき、Exchange が返すことのできるデータ構造体を定義したものです。 EWS 機能の大幅な変更を含む新しいバージョンの Exchange にはそれぞれ、新しいスキーマがあります。 EWS と EWS スキーマは両方とも下位互換ですが、上位互換の場合もあります。以前のバージョンの EWS に基づいて設計されたアプリケーションは、ほとんどの場合に、その後のバージョンの EWS とも連動します。後のバージョンの EWS を対象とするアプリケーションは、以前のバージョンに同じ機能が組み込まれていた場合に動作します。 この記事は、EWS スキーマの役割、スキーマのバージョン管理の仕組み、スキーマ バージョンとサービス バージョンの関係、EWS スキーマと連動するアプリケーションの設計方法を理解するうえで役立ちます。
EWS スキーマの役割
EWS スキーマには、次の役割があります。
クライアントが使用できる機能セットを定義する。 クライアントは、SOAP 自動検出サービスを使用して、サポートされるスキーマ バージョンの一覧を取得できます。 こうすることで、クライアントはアクセスできる機能を判別できるようになります。各スキーマ バージョンは EWS 機能セットを表すからです。 EWS 用にリリースされた新しいスキーマにはそれぞれ、前のバージョンのスキーマ エンティティに加えて、新機能のためのスキーマ定義が含まれます。 このように、EWS は、以前のバージョンの EWS を対象とするアプリケーションをサポートします。
API コントラクトの概要を提供する。 このコントラクトを使用して、Exchange との間で送受信できるデータ構造体を判断できます。
要求を送信するためのバージョン管理メカニズムを提供する。 Exchange サーバーの仮想ディレクトリには、サポートされるすべての EWS スキーマ バージョンが含まれます。
スキーマ バージョンを考慮したアプリケーションの設計
それぞれ異なるバージョンの EWS スキーマと連動するアプリケーションを設計するときは、次の点を念頭に置いてください。
スキーマ バージョンに基づいて機能をオン/オフにしてください。 クライアント機能をスキーマ バージョンにマップすること、場合によってはサービスのバージョンにマップすることが必要になります。 次の例は、スキーマおよびサービスのバージョンに基づいて PropertySet を返します。
private static PropertySet InitPropertySetByVersion(ExchangeService service) { PropertySet props; // The schema version to target to access the NormalizedBody property // is Exchange2013 or later. The server version to target to access the // NormalizedBody property on an email is 15 or later, which // equates to Exchange 2013. if (service.RequestedServerVersion >= ExchangeVersion.Exchange2013 && service.ServerInfo.MajorVersion >= 15) { props = new PropertySet(EmailMessageSchema.NormalizedBody); } else { props = new PropertySet(EmailMessageSchema.Body); } return props; }
使用する機能をサポートする最も古いバージョンの EWS スキーマを使用して、要求をバージョン管理してください。 こうすることで、より多くの潜在的 Exchange サーバーにクライアントを適用できるようになります。 組織のサーバーのみを対象とする基幹業務アプリケーションを開発する場合、これはそれほど重要ではありません。しかし、より広範囲の Exchange ユーザー向けのアプリケーションを構築する場合、これは非常に重要です。
スキーマ バージョン別の機能
クライアントが使用できるスキーマ バージョンは、types.xsd スキーマにある ExchangeVersionType 単純型で識別できます。 ExchangeVersionType は、RequestServerVersion 要素によって実装されます。 RequestServerVersion 要素はすべての EWS 要求で送信されて、クライアントが対象とするスキーマ バージョンをサーバーに示します。 これは、クライアントが使用できる機能セットを示していることになります。
表 1: 製品バージョンおよびスキーマ バージョン別の EWS 機能
製品バージョン | 関連スキーマ バージョン | 機能 |
---|---|---|
Exchange Online | 最新のスキーマ バージョン。 | オンライン クライアント用に追加された新機能に加え、現在のバージョンの Exchange のすべての機能が含まれます。 |
Exchange 2013 SP1 | Exchange2013_SP1 | Exchange 2013 のすべての機能が含まれます。 次の機能は、Exchange 2013 SP1 で導入されました。
|
Exchange 2013 | Exchange2013 | Exchange 2007 および Exchange 2010 で導入されたすべての機能が含まれます。 次の機能は、Exchange 2013 で導入されました。
|
Exchange 2010 SP2 | Exchange2010_SP2 | Exchange 2010 SP1 で導入されたすべての機能が含まれます。 次の機能は、Exchange 2010 SP2 で導入されました。
|
Exchange 2010 SP1 | Exchange2010_SP1 | Exchange 2010 で導入されたすべての機能が含まれます。 次の機能は、Exchange 2010 SP1 で導入されました。
|
Exchange 2010 | Exchange2010 | Exchange 2007 SP1 で導入されたすべての機能が含まれます。 次の機能は、Exchange 2010 の最初のリリース バージョンで導入されました。
|
Exchange 2007 SP1 | Exchange2007_SP1 | Exchange 2007 で導入されたすべての機能が含まれます。 次の機能は、Exchange 2007 SP1 で導入されました。
|
Exchange 2007 | Exchange2007 | 次の機能は、Exchange 2007 の最初のリリース バージョンで導入されました。
|
EWS スキーマとサービスのバージョンの関係
EWS スキーマ バージョンは、サーバーが実行されている EWS サービスのバージョンに関連しています。 EWS スキーマの名前付けパターンは、オンプレミスの Exchange バージョンに関連しています。 たとえば、Exchange 2013 の最初のリリースでは、サービス バージョンは 15.00.0516.032 で、スキーマ名は Exchange2013 です。 Exchange 2013 のスキーマが更新されたため、サービス バージョンが 15.00.0516.032 以降の Exchange 2013 と Exchange Online は両方とも、最新スキーマを表す同じバージョン名を持ちます。 以前のバージョンの Exchange では、EWS スキーマは累積的な更新 (旧称ロールアップ) で更新されませんでした。 しかし、Exchange Online をサポートするために Exchange がより頻繁に更新されるため、累積的な更新に EWS のスキーマ更新が含まれるようになりました。 スキーマ ファイル名とそれに関連するスキーマ バージョン名は、オンプレミス Exchange のサービス パックまたはメジャー リリースでのみ更新されます。
EWS スキーマはコントラクトを定義しますが、シナリオによっては、サービス バージョンは、クライアントがサービスとどのように対話することになるかを判断するための唯一の手段です。 スキーマに反映されていないサービスの動作の変更は、すべての EWS 応答で返されるサービス バージョンによってのみ確認できます。 たとえば、Exchange 2013 でパブリック フォルダーが再設計されたとき、パブリック フォルダーの移動とコピーに使用される操作も変わりました。 Exchange 2010 でパブリック フォルダーをコピーするためのクライアントを設計した場合、Exchange 2013 で同じ結果を得るには、異なる操作を使用するようにクライアントを更新することが必要になります。
EWS スキーマの更新のされ方
Exchange 2007 以降のバージョンの Exchange を実行する Exchange サーバーでは、EWS サービスをホストする仮想ディレクトリに EWS スキーマがあります。 現在のスキーマ バージョンは常に、types.xsd ファイルと messages.xsd ファイルによって表されます。 図 1 は、新しいバージョンのスキーマを開発するときに messages.xsd スキーマがどのようにフォークされるかを示しています。 新機能が追加される前に、元の messages.xsd スキーマのコピーが取り込まれ、前のバージョンのスキーマを表す名前に変更されます。 次に messages.xsd ファイルが、新しいバージョンのサービスの説明を使用して更新されます。
図 1. EWS スキーマの更新のされ方
EWS スキーマが新しいバージョン用に更新される前に、現在のバージョンのスキーマがフォークされ、次の規則に従って名前が変更されます。
<schemaname>-<majorserverversion><servicepack>.xsd
元のファイル名が最新スキーマを表すようになります。 以前のバージョンのスキーマの更新と修正を除いて、すべての新機能が最新スキーマに追加されます。