チュートリアル: Visual Studio での WCF データ サービスの作成とアクセス
このチュートリアルでは、ASP.NET Web アプリケーションでホストされる簡単な WCF Data Services を作成して、Windows フォーム アプリケーションからアクセスする方法について説明します。
このチュートリアルでは、次の作業を行います。
WCF Data Services をホストする Web アプリケーションを作成します。
Northwind データベースの Customers テーブルを表すエンティティ データ モデルを作成します。
WCF Data Services を作成します。
クライアント アプリケーションを作成し、WCF Data Services への参照を追加します。
サービスへのデータ バインディングを有効にし、ユーザー インターフェイスを生成します。
必要に応じて、アプリケーションにフィルター処理機能を追加します。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
Northwind サンプル データベース。
開発用コンピューターにこのデータベースがない場合は、Microsoft ダウンロード センターからダウンロードします。 手順については、「サンプル データベースのダウンロード」を参照してください。
サービスの作成
WCF Data Services を作成するには、Web プロジェクトを追加し、エンティティ データ モデルを作成した後、そのモデルからサービスを作成します。
最初に、サービスをホストする Web プロジェクトを追加します。
注意
次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio での開発設定のカスタマイズ」を参照してください。
Web プロジェクトを作成するには
メニュー バーで [ファイル]、[新規]、[プロジェクト] の順にクリックします。
[新しいプロジェクト] ダイアログ ボックスの [Visual Basic] または [Visual C#] ノードを展開して、[Web] ノードをクリックし、[ASP.NET Web アプリケーション] テンプレートをクリックします。
[名前] ボックスに「NorthwindWeb」と入力し、[OK] をクリックします。
[新しい ASP.NET プロジェクト] ダイアログ ボックスの [テンプレートの選択] リストで [なし] を選択し、[OK] ボタンをクリックします。
この手順では、Northwind データベースにある Customers テーブルを表すエンティティ データ モデルを作成します。
Entity Data Model を作成するには
メニュー バーで [プロジェクト]、[新しい項目の追加] の順に選択します。
[新しい項目の追加] ダイアログ ボックスで [データ] ノードを選択し、[ADO.NET エンティティ データ モデル] 項目を選択します。
[名前] ボックスに「NorthwindModel」と入力し、[追加] ボタンをクリックします。
Entity Data Model ウィザードが表示されます。
エンティティ データ モデル ウィザードの [モデルのコンテンツの選択] ページで、[データベースからの EF デザイナー (EF Designer from database)] 項目を選択してから [次へ] ボタンを選択します。
[データ接続の選択] ページで、次のいずれかの操作を行います。
Northwind サンプル データベースへのデータ接続がドロップダウン リストに表示されている場合は選択します。
または
[新しい接続] を選択して、新しいデータ接続を構成します。 詳細については、「How to: Create Connections to SQL Server Databases」を参照してください。
データベースにパスワードが必要な場合は、[はい、重要情報を接続文字列に含めます。] を選択し、[次へ] をクリックします。
注意
ダイアログ ボックスが表示された場合は、[はい] をクリックしてファイルをプロジェクトに保存します。
[バージョンの選択] ページで [Entity Framework 5.0] オプション ボタンを選択し、[次へ] をクリックします。
注意
WCF サービス で Entity Framework 6 の最新バージョンを使用するには、WCF Data Services Entity Framework Provider NuGet パッケージのインストールが必要になります。「Using WCF Data Services 5.6.0 with Entity Framework 6+」を参照してください。
[データベース オブジェクトの選択] ページで、[テーブル] ノードを展開し、[Customers] チェック ボックスをオンにして [完了] をクリックします。
エンティティ モデル ダイアグラムが表示され、プロジェクトに NorthwindModel.edmx ファイルが追加されます。
この手順では、データ サービスを作成してテストします。
データ サービスを作成するには
メニュー バーで [プロジェクト]、[新しい項目の追加] の順に選択します。
[新しい項目の追加] ダイアログ ボックスで [Web] ノードを選択し、[WCF Data Service 5.6] 項目を選択します。
[名前] ボックスに「NorthwindCustomers」と入力し、[追加] をクリックします。
NorthwindCustomers.svc ファイルがコード エディターに表示されます。
コード エディターで、最初の TODO: コメントを探して、コードを次のコードに置き換えます。
Inherits DataService(Of northwindEntities)
public class NorthwindCustomers : DataService<northwindEntities>
InitializeService イベント ハンドラーのコメントを次のコードに置き換えます。
config.SetEntitySetAccessRule("*", EntitySetRights.All)
config.SetEntitySetAccessRule("*", EntitySetRights.All);
メニュー バーで [デバッグ]、[デバッグなしで開始] の順にクリックして、プロジェクトを実行します。 ブラウザー ウィンドウが開き、そのサービスの XML スキーマが表示されます。
[アドレス] バーの NorthwindCustomers.svc の URL の末尾に「Customers」と入力し、Enter キーを押します。
Customers テーブル内のデータの XML 表現が表示されます。
注意
Internet Explorer がデータを誤って RSS フィードとして解釈する場合があります。RSS フィードを表示するオプションが無効になっていることを確認してください。詳細については、「サービス参照のトラブルシューティング」を参照してください。
ブラウザー ウィンドウを閉じます。
次の手順では、サービスを使用する Windows フォーム クライアント アプリケーションを作成します。
クライアント アプリケーションの作成
クライアント アプリケーションを作成するには、2 つ目のプロジェクトを追加し、そのプロジェクトにサービス参照を追加します。そして、データ ソースを構成し、サービスから取得したデータを表示するユーザー インターフェイスを作成します。
最初に、Windows フォーム プロジェクトをソリューションに追加し、スタートアップ プロジェクトに設定します。
クライアント アプリケーションを作成するには
メニュー バーで [ファイル]、[追加]、[新しいプロジェクト] の順にクリックします。
[新しいプロジェクト] ダイアログ ボックスで、[Visual Basic] ノードまたは [Visual C#] ノードを展開し、[Windows] をクリックして [Windows フォーム アプリケーション] をクリックします。
[名前] ボックスに「NorthwindClient」と入力し、[OK] をクリックします。
ソリューション エクスプローラーで、[NorthwindClient] プロジェクト ノードをクリックします。
メニュー バーで、[プロジェクト]、[スタートアップ プロジェクトに設定] の順に選択します。
この手順では、Web プロジェクト内の WCF Data Services へのサービス参照を追加します。
サービス参照を追加するには
メニュー バーで、[プロジェクト]、[サービス参照の追加] の順に選択します。
[サービス参照の追加] ダイアログ ボックスで、[探索] をクリックします。
NorthwindCustomers サービスの URL が "アドレス" フィールドに表示されます。
[OK] をクリックして、サービス参照を追加します。
この手順では、データ ソースを構成して、サービスへのデータ バインディングを有効にします。
サービスへのデータ バインディングを有効にするには
メニュー バーの [表示] をクリックし、[その他のウィンドウ]、[データ ソース] の順にクリックします。
[データ ソース] ウィンドウで、[新しいデータ ソースの追加] をクリックします。
データ ソースの構成ウィザードの [データ ソースの種類を選択] ページで、[オブジェクト] をクリックし、[次へ] をクリックします。
[データ オブジェクトの選択] ページで、NorthwindClient ノードを展開し、さらに NorthwindClient.ServiceReference1 ノードを展開します。
[Customer] チェック ボックスをオンにし、[完了] をクリックします。
この手順では、サービスから取得したデータを表示するユーザー インターフェイスを作成します。
ユーザー インターフェイスを作成するには
[データ ソース] ウィンドウで、[Customers] ノードのショートカット メニューを開き、[コピー] をクリックします。
[Form1.vb] または [Form1.cs] フォーム デザイナーで、ショートカット メニューを開き、[貼り付け] をクリックします。
DataGridView コントロール、BindingSource コンポーネント、および BindingNavigator コンポーネントがフォームに追加されます。
[CustomersDataGridView] コントロールを選択してから、[プロパティ] ウィンドウで [Dock] プロパティを [Fill] に設定します。
ソリューション エクスプローラーで、[Form1] ノードのショートカット メニューを開き、[コードの表示] を選択してコード エディターを開き、次の Imports または Using ステートメントをファイルの先頭に追加します。
Imports NorthwindClient.ServiceReference1
using NorthwindClient.ServiceReference1;
Form1_Load イベント ハンドラーに次のコードを追加します。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim proxy As New NorthwindEntities _ (New Uri("https://localhost:53161/NorthwindCustomers.svc/")) Me.CustomersBindingSource.DataSource = proxy.Customers End Sub
private void Form1_Load(object sender, EventArgs e) { NorthwindEntities proxy = new NorthwindEntities(new Uri("https://localhost:53161/NorthwindCustomers.svc/")); this.CustomersBindingSource.DataSource = proxy.Customers; }
ソリューション エクスプローラーで、NorthwindCustomers.svc ファイルのショートカット メニューを開き、[ブラウザーで表示] をクリックします。 Internet Explorer が開き、そのサービスの XML スキーマが表示されます。
Internet Explorer のアドレス バーから URL をコピーします。
手順 4. で追加したコードの「https://localhost:53161/NorthwindCustomers.svc/」を選択し、コピーした URL に置き換えます。
メニュー バーで、[デバッグ]、[デバッグ開始] の順に選択してアプリケーションを実行します。 顧客情報が表示されます。
この時点で、NorthwindCustomers サービスから取得した顧客の一覧を表示するアプリケーションが作成されました。 このサービスを使用して他のデータも公開する場合は、エンティティ データ モデルを変更して、Northwind データベースの他のテーブルを含めます。
次の省略可能な手順では、サービスによって返されたデータをフィルター処理する方法について説明します。
フィルター処理機能の追加
この手順では、アプリケーションをカスタマイズして、都市で顧客データをフィルター処理します。
都市によるフィルター処理を追加するには
ソリューション エクスプローラーで、[Form1.vb] または [Form1.cs] ノードのショートカット メニューを開き、[開く] をクリックします。
Button コントロールのショートカット メニューを開き、[コードの表示] をクリックして、Button1_Click イベント ハンドラーに次のコードを追加します。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim proxy As New northwindEntities _ (New Uri("https://localhost:53161/NorthwindCustomers.svc")) Dim city As String = TextBox1.Text If city <> "" Then Me.CustomersBindingSource.DataSource = From c In _ proxy.Customers Where c.City = city End If End Sub
private void Button1_Click(object sender, EventArgs e) { ServiceReference1.northwindModel.northwindEntities proxy = new northwindEntities(new Uri("https://localhost:53161/NorthwindCustomers.svc")); string city = TextBox1.Text; if (!string.IsNullOrEmpty(city)) { this.CustomersBindingSource.DataSource = from c in proxy.Customers where c.City == city; } }
このコードの https://localhost:53161/NorthwindCustomers.svc を Form1_Load イベント ハンドラーの URL に置き換えます。
メニュー バーで、[デバッグ]、[デバッグ開始] の順に選択してアプリケーションを実行します。
テキスト ボックスに「London」と入力し、ボタンをクリックします。 ロンドンの顧客だけが表示されます。