英語で読む

次の方法で共有


データ サービスのクイック スタート (ADO.NET Data Services フレームワーク)

このトピックの手順に従って ADO.NET Data Services を使用し、Northwind サンプル データベースに接続するデータ サービスを作成し、テストします。

このサンプル データ サービスを作成するには、まずこのトピックの「前提条件」セクションに示されている必要なコンポーネントがコンピュータにインストールされていることを確認します。このデータ サービスを作成するには、次の手順を実行します。

  1. ASP.NET Web アプリケーションを作成します。

  2. エンティティ データ モデル (EDM) を作成し、このモデルをデータベースに接続します。

  3. Web アプリケーションでデータ サービスを作成します。

  4. データ サービスへのアクセスを有効にします。

これらの手順を使用してデータ サービスを作成し、有効にした後、実装したサンプル データ サービスの使用を試すことができます。

前提条件

ADO.NET Data Services フレームワークを使用してデータ サービスを作成するには、コンピュータに次のコンポーネントがインストールされている必要があります。

  • ADO.NET Data Services および ADO.NET Entity Framework。どちらも Microsoft .NET Framework 3.5 Service Pack 1 (SP1) 以降のインストール時にインストールされます。

    ADO.NET Data Services フレームワークは、ランタイム コンポーネントおよびデータ アクセス コンポーネントで構成されます。ランタイム コンポーネントは、URI 変換、AtomPub および JSON トランスポート形式、および対話プロトコルを実装します。データ アクセス コンポーネントは、IQueryable<T> インターフェイスを使用してコンポーネント間の通信をサポートします。一連の規則により、共通言語ランタイム (CLR) の型は ADO.NET Data Services で使用する URI 構文およびペイロードのプロトコルにマップされます。

  • エンティティ フレームワーク ツール。これらのツールは Visual Studio 2008 Service Pack 1 (SP1) に含まれています。

  • ADO.NET データ アクセス プロバイダ。これらのプロバイダは、Microsoft SQL Server 2005 のどのバージョンでもサポートされます。これには SQL Server Express も含まれます。

  • Northwind サンプル データベース。このサンプル データベースをダウンロードするには、ダウンロード ページ「SQL Server 用サンプル データベース」を参照してください。

ASP.NET Web アプリケーションの作成

ADO.NET Data Services は Windows Communication Foundation サービスの特殊バージョンです。ADO.NET Data Services は ASP.NET サイト内で実行されます。

ASP.NET Web アプリケーションを既にお持ちで、この既存のアプリケーションにサンプル データ サービスを追加する場合は、次の手順はスキップして、次のセクション「エンティティ データ モデルの作成」に進むことができます。

[!メモ]

次の手順では、Visual Studio 2008 SP1 の Standard、Professional、および Team System バージョンを使用します。Visual Studio Web Developer を使用する場合は、新しい Web アプリケーションではなく新しい Web サイトを作成する必要があります。

  1. Visual Studio の [ファイル] メニューで、[新規作成][プロジェクト] の順に選択します。

  2. [新しいプロジェクト] ダイアログ ボックスで、プログラム言語として [Visual Basic] または [Visual C#] のいずれかを選択します。

  3. [テンプレート] ペインで、[ASP.NET Web アプリケーション] を選択します。

  4. SimpleDataService」などのプロジェクト名を入力します。

  5. [OK] をクリックします。

エンティティ データ モデルの作成

ADO.NET Entity Frameworkを使用してリレーショナル データベースに基づき EDM を作成するには

  1. ソリューション エクスプローラで、作成した ASP.NET プロジェクトの名前を右クリックし、[新しい項目の追加] をクリックします。

  2. [新しい項目の追加] ダイアログ ボックスで [ADO.NET エンティティ データ モデル] を選択します。

  3. データ モデルの名前として「Northwind」を入力します。

    Northwind.edmx が、エンティティ データ モデル ウィザードで作成したデータ モデルのファイル名になります。作成されるデータ モデルのスキーマは、Northwind サンプル データベースに 1 対 1 でマップされます。

  4. エンティティ データ モデル ウィザードで、[データベースから生成] を選択し、[次へ] をクリックします。

  5. 次のいずれかの手順を実行し、データ モデルをデータベースに接続してから [次へ] をクリックします。

    • データベース接続がまだ構成されていない場合は、[新しい接続] をクリックして新しい接続を作成します。

      [!メモ]

      SQL Server 2005 を使用している場合は、MultipleActiveResultSets オプションを true に設定することをお勧めします。接続文字列でこのオプションが true に設定されていない場合は、[接続プロパティ] ダイアログ ボックスで [詳細設定] をクリックし、MultipleActiveResultSets オプションを探し、true に設定します。

      または

    • Northwind データベースに接続するようにデータベース接続が既に構成されている場合は、一覧からその接続を選択します。

  6. ウィザードの最終ページで、データベース内のすべてのテーブルのチェック ボックスをオンにし、ビューおよびストアド プロシージャのチェック ボックスをオフにします。

    ウィザードの最終ページには、データベースから使用できるテーブル、ビュー、およびストアド プロシージャが表示されますが、このトピックで作成するデータ モデルを単純なものにするために、テーブルのみを選択します。

  7. [完了] をクリックして、ウィザードを終了します。

ウィザードによって、データベースのメタデータを表すファイルが生成され、それらのファイルがプロジェクトに追加されます。

データ サービスの作成

ADO.NET データ サービスは、前述の手順で作成したデータ モデルを、インターネット プロトコルによってアクセス可能なサービスとして配置します。

データ サービスを作成するには

  1. ソリューション エクスプローラで、ASP.NET プロジェクトの名前を右クリックし、[新しい項目の追加] をクリックします。

  2. [新しい項目の追加] ダイアログ ボックスで、[ADO.NET Data Service] を選択します。

    [!メモ]

    Web サービスなど、類似する別のオプションではなく、必ず [ADO.NET Data Service] を選択してください。

  3. サービスの名前として「Northwind」を入力します。

    Visual Studio で新しいサービスの XML マークアップおよびコード ファイルが作成されます。既定では、コード エディタのウィンドウが開きます。ソリューション エクスプローラでは、このサービスに Northwind という名前が付き、拡張子は .svc.cs または .svc.vb になります。

  4. データ サービスのコードの冒頭で、次の手順のいずれかを実行し、エンティティ データ モデル ウィザードで生成されたデータ モデル クラスの名前空間を含めます。

    • ASP.NET アプリケーションで Visual Basic を使用する場合は、imports ステートメントを追加します。

    • ASP.NET アプリケーションで C# を使用する場合は、using ステートメントを追加します。

    Visual Studio オブジェクト ブラウザには、データ サービスが使用するデータベースから取得した名前空間が表示されます。この例では、データベースには Northwind、名前空間には NorthwindModel という名前が付いています。

  5. データ サービスのコードで、"TODO" コメントを見つけ、エンティティ データ モデル ウィザードで生成されたクラスの名前でこのコメントを置き換えます。

    この例では、エンティティ データ モデル ウィザードによって生成されたクラスの名前は、NorthwindModel 名前空間の NorthwindEntities です。

データ サービスへのアクセスの有効化

既定では、データ サービスはリソースへのアクセスを有効化しません。データ サービスがデータを返すためには、アクセスを明示的に有効化する必要があります。

サービスに関連するすべてのリソースへの読み取りおよび書き込みアクセスを有効化するには、DataService から派生したクラスの InitializeService 関数を見つけます。コンテナへのリソースの権限を「All」に設定するために必要なコードをこの関数に追加します。次のコードに示したように、C# で config.SetResourceContainerAccessRule("*", ResourceContainerRights.All) という行を InitializeService 関数に追加します。

using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;
using NorthwindModel;

namespace SimpleDataService
{
    public class Northwind : DataService< NorthwindModel.NorthwindEntities >
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(IDataServiceConfiguration config)
        {
            // TODO: set rules to indicate which entity sets and
           // service operations are visible and updatable. 
           // Use *(all sets) only for testing.
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);

        }
    }
}

これでサービスを Visual Studio から実行できるようになりました。開発 Web サーバーを起動するには F5 を押します。次のセクションでは、新しく作成したデータ サービスの使用法について説明します。

データ サービスの試行

このサンプルの目的上、データ サービスとの対話には Web ブラウザを使用します。Web ブラウザを使用すると、リクエストのアドレス構文を試したり、結果を表示したりすることが簡単にできます。ただし、ほとんどのアプリケーションでは、終了時や使用中のデータ サービスとの対話に Web ブラウザは使用しません。通常、アプリケーションでは、コードまたはスクリプト言語を使用してデータ サービスと対話します。

[!メモ]

ADO.NET Data Services で使用する HTTP 構文の詳細については、「URI によるデータの単純なアドレス指定スキーム (ADO.NET Data Services フレームワーク)」および「ADO.NET Data Services のクライアント アプリケーション」を参照してください。

既定のサービス ドキュメントの取得

既定では、データ サービスによって返される XML ドキュメントは AtomPub サービス ドキュメントです。AtomPub は既定のシリアル化メソッドです。ATOM プロトコルの詳細については、ADO.NET Data Services チーム サイトを参照してください。

既定のサービス ドキュメントを要求するには

  • Web ブラウザを開き、次のような URI を入力します。ただし、ポート番号は開発環境と一致するものに置き換えます。

    https://localhost:50781/northwind.svc

アクセス規則が前の URI に従って設定されている場合、データ サービスはブラウザに既定のサービス ドキュメントを返します。この既定のサービス ドキュメントには、データ サービスによって配置される Northwind データを表すエンティティ セットの一覧が含まれます。この既定のサービス ドキュメントは、次の XML サンプルに類似するものです。

<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
<service xml:base="https://localhost:1365/Northwind.svc/" 
xmlns:atom="http://www.w3.org/2005/Atom" 
xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app">
<workspace>
 <atom:title>Default</atom:title> 
<collection href="Categories">
 <atom:title>Categories</atom:title> 
 </collection>
<collection href="CustomerDemographics">
 <atom:title>CustomerDemographics</atom:title> 
 </collection>
<collection href="Customers">
 <atom:title>Customers</atom:title> 
 </collection>
<collection href="Employees">
 <atom:title>Employees</atom:title> 
 </collection>
<collection href="Order_Details">
 <atom:title>Order_Details</atom:title> 
 </collection>
<collection href="Orders">
 <atom:title>Orders</atom:title> 
 </collection>
<collection href="Products">
 <atom:title>Products</atom:title> 
 </collection>
<collection href="Region">
 <atom:title>Region</atom:title> 
 </collection>
<collection href="Shippers">
 <atom:title>Shippers</atom:title> 
 </collection>
<collection href="Suppliers">
 <atom:title>Suppliers</atom:title> 
 </collection>
<collection href="Territories">
 <atom:title>Territories</atom:title> 
 </collection>
 </workspace>
 </service>

エンティティ セットの取得

データ サービスのコンテンツを参照するには、開始点として既定のサービス ドキュメント内のエンティティ セットを使用します。たとえば、サンプル データ サービスの既定のサービス ドキュメント内のエンティティ セットには、ProductsShippersTerritories などがあります。これらのエンティティ セットのいずれかですべてのエンティティを簡単に返すことができます。

製品の一覧を要求するには

  • Web ブラウザで次の URI を入力します。

    https://localhost/northwind.svc/Products

URI に /Products を追加すると、ストレージ内のすべての製品が返されます。次の XML は、最初に返される 4 つの製品を示しています。これは結果の部分的な一覧です。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="https://localhost:1365/Northwind.svc/" xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Products</title>
  <id>https://localhost:1365/Northwind.svc/Products</id>
  <updated>2008-05-22T16:42:14Z</updated>
  <link rel="self" title="Products" href="Products" />
  <entry m:type="NorthwindModel.Products">
    <id>https://localhost:1365/Northwind.svc/Products(1)</id>
    <title type="text"></title>
    <updated>2008-05-22T16:42:14Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Products" href="Products(1)" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
       type="application/atom+xml;type=entry" title="Categories" href="Products(1)/Categories" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details" 
       type="application/atom+xml;type=feed" title="Order_Details" href="Products(1)/Order_Details" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers" 
       type="application/atom+xml;type=entry" title="Suppliers" href="Products(1)/Suppliers" />
    <content type="application/xml">
      <m:properties>
        <d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
        <d:ProductID m:type="Edm.Int32">1</d:ProductID>
        <d:ProductName>Chai</d:ProductName>
        <d:QuantityPerUnit>10 boxes x 20 bags</d:QuantityPerUnit>
        <d:ReorderLevel m:type="Edm.Int16">10</d:ReorderLevel>
        <d:UnitPrice m:type="Edm.Decimal">18.0000</d:UnitPrice>
        <d:UnitsInStock m:type="Edm.Int16">36</d:UnitsInStock>
        <d:UnitsOnOrder m:type="Edm.Int16">0</d:UnitsOnOrder>
      </m:properties>
    </content>
  </entry>
  <entry m:type="NorthwindModel.Products">
    <id>https://localhost:1365/Northwind.svc/Products(2)</id>
    <title type="text"></title>
    <updated>2008-05-22T16:42:14Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Products" href="Products(2)" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
       type="application/atom+xml;type=entry" title="Categories" href="Products(2)/Categories" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details" 
       type="application/atom+xml;type=feed" title="Order_Details" href="Products(2)/Order_Details" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers" 
       type="application/atom+xml;type=entry" title="Suppliers" href="Products(2)/Suppliers" />
    <content type="application/xml">
      <m:properties>
        <d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
        <d:ProductID m:type="Edm.Int32">2</d:ProductID>
        <d:ProductName>Chang</d:ProductName>
        <d:QuantityPerUnit>24 - 12 oz bottles</d:QuantityPerUnit>
        <d:ReorderLevel m:type="Edm.Int16">25</d:ReorderLevel>
        <d:UnitPrice m:type="Edm.Decimal">19.0000</d:UnitPrice>
        <d:UnitsInStock m:type="Edm.Int16">28</d:UnitsInStock>
        <d:UnitsOnOrder m:type="Edm.Int16">40</d:UnitsOnOrder>
      </m:properties>
    </content>
  </entry>
  <entry m:type="NorthwindModel.Products">
    <id>https://localhost:1365/Northwind.svc/Products(3)</id>
    <title type="text"></title>
    <updated>2008-05-22T16:42:14Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Products" href="Products(3)" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
       type="application/atom+xml;type=entry" title="Categories" href="Products(3)/Categories" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details" 
       type="application/atom+xml;type=feed" title="Order_Details" href="Products(3)/Order_Details" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers"
       type="application/atom+xml;type=entry" title="Suppliers" href="Products(3)/Suppliers" />
    <content type="application/xml">
      <m:properties>
        <d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
        <d:ProductID m:type="Edm.Int32">3</d:ProductID>
        <d:ProductName>Aniseed Syrup</d:ProductName>
        <d:QuantityPerUnit>12 - 550 ml bottles</d:QuantityPerUnit>
        <d:ReorderLevel m:type="Edm.Int16">25</d:ReorderLevel>
        <d:UnitPrice m:type="Edm.Decimal">10.0000</d:UnitPrice>
        <d:UnitsInStock m:type="Edm.Int16">65</d:UnitsInStock>
        <d:UnitsOnOrder m:type="Edm.Int16">70</d:UnitsOnOrder>
      </m:properties>
    </content>
  </entry>
  <entry m:type="NorthwindModel.Products">
    <id>https://localhost:1365/Northwind.svc/Products(4)</id>
    <title type="text"></title>
    <updated>2008-05-22T16:42:14Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Products" href="Products(4)" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
       type="application/atom+xml;type=entry" title="Categories" href="Products(4)/Categories" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details" 
       type="application/atom+xml;type=feed" title="Order_Details" href="Products(4)/Order_Details" />
    <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers" 
       type="application/atom+xml;type=entry" title="Suppliers" href="Products(4)/Suppliers" />
    <content type="application/xml">
      <m:properties>
        <d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
        <d:ProductID m:type="Edm.Int32">4</d:ProductID>
        <d:ProductName>Chef Anton's Cajun Seasoning</d:ProductName>
        <d:QuantityPerUnit>48 - 6 oz jars</d:QuantityPerUnit>
        <d:ReorderLevel m:type="Edm.Int16">0</d:ReorderLevel>
        <d:UnitPrice m:type="Edm.Decimal">22.0000</d:UnitPrice>
        <d:UnitsInStock m:type="Edm.Int16">6</d:UnitsInStock>
        <d:UnitsOnOrder m:type="Edm.Int16">0</d:UnitsOnOrder>
      </m:properties>
    </content>
  </entry>
  
</feed>

単一のエンティティの取得

エンティティ セット内のエンティティの一覧を返すことができるだけでなく、特定のエンティティを要求することもできます。個々のエンティティの URI は、サービスのベース URI、それに続くエンティティ セットの名前、さらにその後に続くエンティティの最終 ID で構成されます。エンティティの ID は、かっこ内のキー値です。

ID が 1 である製品を要求するには

  • Web ブラウザで次の URI を入力します。

    http://host/vdir/northwind.svc/Products(1)

ブラウザに入力した URI は、1 という ID を持つ製品を取得します。次の XML はこの要求の結果を示しています。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xml:base="https://localhost:1365/Northwind.svc/" 
xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" 
xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
m:type="NorthwindModel.Products" xmlns="http://www.w3.org/2005/Atom">
  <id>https://localhost:1365/Northwind.svc/Products(1)</id>
  <title type="text"></title>
  <updated>2008-05-22T16:47:12Z</updated>
  <author>
    <name />
  </author>
  <link rel="edit" title="Products" href="Products(1)" />
  <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
     type="application/atom+xml;type=entry" title="Categories" href="Products(1)/Categories" />
  <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details"
     type="application/atom+xml;type=feed" title="Order_Details" href="Products(1)/Order_Details" />
  <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers" 
     type="application/atom+xml;type=entry" title="Suppliers" href="Products(1)/Suppliers" />
  <content type="application/xml">
    <m:properties>
      <d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
      <d:ProductID m:type="Edm.Int32">1</d:ProductID>
      <d:ProductName>Chai</d:ProductName>
      <d:QuantityPerUnit>10 boxes x 20 bags</d:QuantityPerUnit>
      <d:ReorderLevel m:type="Edm.Int16">10</d:ReorderLevel>
      <d:UnitPrice m:type="Edm.Decimal">18.0000</d:UnitPrice>
      <d:UnitsInStock m:type="Edm.Int16">36</d:UnitsInStock>
      <d:UnitsOnOrder m:type="Edm.Int16">0</d:UnitsOnOrder>
    </m:properties>
  </content>
</entry>

エンティティ リレーションシップの取得

このサンプル データ サービスでは一部の値は ProductNameUnitPrice などのスカラ値です。CategoriesSuppliers などの他の値は、ナビゲーション プロパティの最後を表します。ナビゲーション プロパティは、EDM 関連付けによって関連付けられたエンティティを探すショートカットのプロパティです。

たとえば、Products エンティティには SuppliersCategories の両方を表すエンティティへの関連付けが含まれます。これらのリレーションシップをスキャンする URI を作成できます。

ID が 2 である製品の仕入先を要求するには

  • Web ブラウザで次の URI を入力します。

    http://host/vdir/northwind.svc/Products(2)/Suppliers

次の XML はこの要求の結果を示しています。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xml:base="https://localhost:1365/Northwind.svc/" 
xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" 
xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
m:type="NorthwindModel.Suppliers" xmlns="http://www.w3.org/2005/Atom">
  <id>https://localhost:1365/Northwind.svc/Suppliers(1)</id>
  <title type="text"></title>
  <updated>2008-05-22T16:50:11Z</updated>
  <author>
    <name />
  </author>
  <link rel="edit" title="Suppliers" href="Suppliers(1)" />
  <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Products" 
     type="application/atom+xml;type=feed" title="Products" href="Suppliers(1)/Products" />
  <content type="application/xml">
    <m:properties>
      <d:Address>49 Gilbert St.</d:Address>
      <d:City>London</d:City>
      <d:CompanyName>Exotic Liquids</d:CompanyName>
      <d:ContactName>Charlotte Cooper</d:ContactName>
      <d:ContactTitle>Purchasing Manager</d:ContactTitle>
      <d:Country>UK</d:Country>
      <d:Fax m:null="true" />
      <d:HomePage m:null="true" />
      <d:Phone>(171) 555-2222</d:Phone>
      <d:PostalCode>EC1 4SD</d:PostalCode>
      <d:Region m:null="true" />
      <d:SupplierID m:type="Edm.Int32">1</d:SupplierID>
    </m:properties>
  </content>
</entry>

参照

概念

リソースのアドレスを指定する URI 形式 (ADO.NET Data Services フレームワーク)
一般的な HTTP 要件 (ADO.NET Data Services フレームワーク)

その他のリソース

ADO.NET Entity Framework