データ サービスのバージョン管理 (WCF Data Services)
Open Data Protocol (OData) では、データ サービスを作成できます。これにより、クライアントは、データ モデルに基づく URI を使用してリソースとしてのデータにアクセスできます。 OData では、サービス操作の定義もサポートしています。 ビジネス ニーズの変化、情報テクノロジの要件、その他の問題への対処などのさまざまな理由により、サービスの初期配置後と、場合によっては有効期間中に数回、これらのデータ サービスを変更することが必要になる場合があります。 既存のデータ サービスに変更を加える場合は、新しいバージョンのデータ サービスを定義する必要性や、既存のクライアント アプリケーションへの影響を最小限に抑える最善の方法を検討する必要があります。 ここでは、新しいバージョンのデータ サービスをいつどのように作成するかに関するガイダンスを示します。 さらに、WCF Data Services が OData プロトコルの異なるバージョンをサポートするクライアントとデータ サービスの間の交換どのように処理するかについても説明します。
WCF Data Service のバージョン管理
データ サービスが配置され、データが使用されている状況では、データ サービスに変更を加えることで、既存のクライアント アプリケーションとの間に互換性の問題が発生する可能性があります。 ただし、サービスの全体的なビジネス ニーズを受けて変更が求められることも多いため、クライアント アプリケーションへの影響を最小限に抑えながらデータ サービスの新しいバージョンをいつどのように作成するかを検討する必要があります。
新しいバージョンのデータ サービスが推奨されるデータ モデルの変更
データ サービスの新しいバージョンを発行するかどうかを検討する際は、さまざまな種類の変更がクライアント アプリケーションに与える影響を理解することが重要です。 データ サービスの新しいバージョンを作成する必要があるデータ サービスへの変更は、次の 2 つのカテゴリに分類できます。
サービス コントラクトに対する変更。これには、サービス操作の更新、エンティティ セット (フィード) のアクセシビリティへの変更、バージョンの変更、およびサービスの動作に対するその他の変更が含まれます。
データ コントラクトに対する変更。これには、データ モデル、フィード形式、またはフィードのカスタマイズが含まれます。
次の表に、データ サービスの新しいバージョンの発行を考慮する必要がある変更の種類を示します。
変更の種類 |
新しいバージョンが必要 |
新しいバージョンは不要 |
---|---|---|
サービス操作 |
|
|
サービスの動作 |
|
|
エンティティ セットのアクセス許可 |
|
|
エンティティのプロパティ |
|
|
エンティティ セット |
|
|
フィードのカスタマイズ |
|
1 特定のエラー コードを受信することにクライアント アプリケーションがどの程度厳密に依存しているかによって異なります。
2 IgnoreMissingProperties プロパティを true に設定すると、クライアントは、データ サービスによって送信された、クライアント上で定義されていない新しいプロパティを無視します。 ただし、挿入の場合、クライアントによって POST 要求に含められていないプロパティは既定値に設定されます。 更新の場合、クライアントが識別できないプロパティ内の既存のデータは、既定値で上書きされます。 この場合は、更新を MERGE 要求として送信する必要があります (これは既定の動作です)。 詳細については、「データ サービス コンテキストの管理 (WCF Data Services)」を参照してください。
データ サービスのバージョンの管理
必要に応じて、サービス コントラクトまたはデータ モデルが更新されたサービスの新しいインスタンスを作成して、データ サービスの新しいバージョンを定義します。 次に、この新しいサービスを、以前のバージョンと区別する新しい URI エンドポイントを使用して公開します。 次に例を示します。
古いバージョン: http://services.odata.org/Northwind/v1/Northwind.svc/
新しいバージョン: http://services.odata.org/Northwind/v2/Northwind.svc/
データ サービスをアップグレードした場合、新しいルート URI を使用するには、新しいデータ サービス メタデータに基づいてクライアントも更新する必要があります。 可能な場合は、新しいバージョンを使用するためのアップグレードが行われていないクライアントをサポートするために、データ サービスの以前のバージョンを保持してください。 データ サービスの古いバージョンは、必要でなくなった時点で削除できます。 データ サービスのエンドポイント URI を外部の構成ファイルに保持することを検討する必要があります。
OData プロトコルのバージョン
OData の新しいバージョンがリリースされると、データ サービスでサポートされている OData プロトコルの同じバージョンがクライアント アプリケーションで使用されていない可能性が出てきます。 OData の新しいバージョンをサポートするデータ サービスにアクセスできる古いクライアント アプリケーションもあります。 また、アクセス先のデータ サービスよりも新しいバージョンの OData をサポートする、新しいバージョンの WCF Data Services クライアント ライブラリを使用しているクライアント アプリケーションもあります。
WCF Data Services では、これらのバージョン管理シナリオを処理するために OData で提供されるサポートを利用しています。 さらに、データ サービスが使用する OData のバージョンとは異なるバージョンがクライアントで使用されている場合に、データ モデル メタデータを生成および使用してクライアント データ サービス クラスを作成するためのサポートも備えられています。 詳細については、「OData: プロトコルのバージョン管理」を参照してください。
バージョンのネゴシエーション
クライアントが要求するバージョンにかかわらず、サービスによって使用される OData プロトコルの最高バージョンを定義するようにデータ サービスを構成できます。 そのためには、データ サービスで使用される DataServiceBehavior の MaxProtocolVersion プロパティに DataServiceProtocolVersion の値を指定します。 詳細については、「データ サービスの構成 (WCF Data Services)」を参照してください。
アプリケーションで WCF Data Services クライアント ライブラリを使用してデータ サービスにアクセスする場合、アプリケーションで使用している OData のバージョンと機能により、ライブラリでは自動的にこれらのヘッダーに正しい値が指定されます。 既定では、WCF Data Services では要求された操作をサポートする最も低いプロトコル バーションが使用されます。
次の表に、OData プロトコルの特定のバージョンに対する WCF Data Services のサポートが用意されている .NET Framework および Silverlight のバージョンを示します。
OData プロトコルのバージョン |
サポートが用意されているバージョン |
---|---|
Version 1 |
|
Version 2 |
|
Version 3 |
|
メタデータのバージョン
既定では、WCF Data Services ではデータ モデルを表すために CSDL のバージョン 1.1 が使用されます。 リフレクション プロバイダーまたはカスタム データ サービス プロバイダーに基づくデータ モデルの場合は、常にこの CSDL バージョンが使用されます。 ただし、Entity Framework を使用してデータ モデルを定義している場合は、返される CSDL のバージョンは Entity Framework で使用されるバージョンと同じになります。 CSDL のバージョンは、スキーマ要素の名前空間によって決定されます。 詳細については、次のトピックを参照してください。、「[MC-CSDL]: 概念スキーマ定義ファイル形式」の仕様を参照してください。
返されたメタデータの DataServices 要素には DataServiceVersion 属性も含まれます。この属性は、応答メッセージの DataServiceVersion ヘッダーの値と同じです。 Visual Studio の [サービス参照の追加] ダイアログ ボックスなどのクライアント アプリケーションでは、この情報を使用して、データ サービスをホストする WCF Data Services のバージョンと正しく連動するクライアント データ サービス クラスを生成します。 詳細については、「OData: プロトコルのバージョン管理」を参照してください。
関連項目
概念
データ サービス プロバイダー (WCF Data Services)