チュートリアル: RIA Services クラス ライブラリの作成
このチュートリアルでは、WCF RIA サービス クラス ライブラリの再利用可能なコンポーネントを含む Silverlight アプリケーションを作成する方法について学習します。
WCF RIA サービス クラス ライブラリを使用すると、再利用可能な中間層のロジックとプレゼンテーション層のロジックを作成できます。ただし、RIA サービス クラス ライブラリの使用は RIA サービス ソリューションの作成よりも複雑です。
例を単純にするために、このチュートリアルでは Silverlight アプリケーションと同じソリューションのクラス ライブラリについて説明します。このクラス ライブラリは、個別のソリューションに存在できます。
RIA サービス クラス ライブラリの背景の詳細については、「RIA Services ソリューションの作成」の関連セクションを参照してください。
注 : |
---|
再利用可能なコンポーネントを作成する必要がない場合、または RIA サービス ソリューションの作成に関する入門編のチュートリアルを参照する場合は、「チュートリアル: RIA Services ソリューションの作成」を参照してください。 |
前提条件
このチュートリアル、および WCF RIA サービス のドキュメントで紹介されている他のチュートリアルでは、WCF RIA サービス および WCF RIA サービス Toolkit に加え、Visual Studio 2010 や Silverlight の開発者向けランタイムと SDK など、前提条件となっているいくつかのプログラムが適切にインストールおよび構成されている必要があります。また、SQL Server 2008 R2 Express with Advanced Services をインストールして構成し、AdventureWorks OLTP と LT データベースをインストールすることも必要です。
これらの各前提条件を満たしているかどうかを確認するための詳細な手順については、「WCF RIA Services の前提条件」ノード内のトピックを参照してください。このチュートリアルを進める前に、トピックに記載されている手順に従って、この RIA サービス チュートリアルを実行するときに発生する問題をできるだけ最小限に抑えるようにします。
WCF RIA Services クラス ライブラリを含む Silverlight ソリューションを作成するには
Visual Studio 2010 で、[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックして、新しい RIA サービス プロジェクトを作成します。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[インストールされたテンプレート] の [Silverlight] で [Silverlight アプリケーション] テンプレートをクリックし、新しいプロジェクトに ExampleSilverlightApp という名前を付けます。
[新しい Silverlight アプリケーション] ダイアログ ボックスで、アプリケーションの [WCF RIA サービスを有効にする] チェック ボックスをオフにします。
クラス ライブラリに Silverlight プロジェクトとサーバー プロジェクト間の RIA サービス リンクが作成されるため、Silverlight アプリケーションではこれらのプロジェクト間の RIA サービス リンクは必要ありません。
ソリューション エクスプローラーで、ソリューションを右クリックし、[追加] をポイントして、[新しいプロジェクト] をクリックします。
[新しいプロジェクトの追加] ダイアログ ボックスが表示されます。
[インストールされたテンプレート] の [Silverlight] カテゴリで [WCF RIA Services クラス ライブラリ] テンプレートをクリックし、AdventureWorksClassLibrary という名前を付けます。
[OK] をクリックします。
次の図に示すように、ソリューションに 4 つのプロジェクトが追加されました。
ExampleSilverlightApp.Web プロジェクトを右クリックし、[参照の追加] をクリックします。
[参照の追加] ダイアログ ボックスが表示されます。
[プロジェクト] タブで [AdventureWorksClassLibrary.Web] プロジェクトをクリックし、[OK] をクリックします。
ExampleSilverlightApp プロジェクトを右クリックし、[参照の追加] をクリックします。
[プロジェクト] タブで [AdventureWorksClassLibrary] プロジェクトをクリックし、[OK] をクリックします。
中間層のライブラリを作成するには
AdventureWorksClassLibrary.Web プロジェクトで ADO.NET エンティティ データ モデルを追加し、AdventureWorksModel.edmx という名前を付けます。この方法の手順については、「チュートリアル: RIA Services ソリューションの作成」を参照してください。
Entity Data Model ウィザードで、エンティティ モデルに Product テーブルを追加します。
ソリューションをビルドします (Ctrl キーと Shift キーを押しながら B キーを押します)。
AdventureWorksClassLibrary.Web プロジェクトを右クリックし、[追加] をポイントして、[新しい項目] をクリックします。
[DomainService クラス] テンプレートをクリックし、ProductsDomainService という名前を付けます。
[追加] をクリックします。
[新しいドメイン サービス クラスの追加] ダイアログ ボックスが表示されます。
使用可能なデータ モデルから [Product] を選択してドメイン サービスを介して公開し、[OK] をクリックします。
ソリューションをビルドします (Ctrl キーと Shift キーを押しながら B キーを押します)。
ソリューション エクスプローラーで、各プロジェクトの [すべてのファイルを表示] をクリックします。
Generated_Code フォルダーは、AdventureWorksClassLibrary プロジェクトにのみ存在することに注意してください。ExampleSilverlightApp プロジェクトのコードは生成されませんでしたが、ExampleSilverlightApp プロジェクトと AdventureWorksClassLibrary プロジェクト間にはプロジェクト参照が存在するため、AdventureWorksClassLibrary プロジェクトの生成されたコードを使用できます。
Silverlight プロジェクトで生成されたコードを使用するには
ExampleSilverlightApp プロジェクトを右クリックし、[参照の追加] をクリックします。
System.ServiceModel.DomainServices.Client アセンブリへの参照を追加します。
アセンブリを検索するには、[.NET] タブをクリックします。
ExampleSilverlightApp プロジェクトで、MainPage.xaml を開きます。
ツールボックスから Grid 要素内に DataGrid コントロールをドラッグします。
XML 名前空間および Data アセンブリへの参照が追加されます。
次の XAML に示すように、DataGrid に
ProductsGrid
という名前を付けます。<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="ExampleSilverlightApp.MainPage" xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="https://schemas.microsoft.com/expression/blend/2008" xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <data:DataGrid Name="ProductsGrid"></data:DataGrid> </Grid> </UserControl>
MainPage.xaml の分離コードを開きます。
次のコードを追加して製品を取得します。
Imports System.ServiceModel.DomainServices.Client Imports AdventureWorksClassLibrary.Web Partial Public Class MainPage Inherits UserControl Private _productContext As New ProductsDomainContext Public Sub New() InitializeComponent() Dim loadOp = Me._productContext.Load(Me._productContext.GetProductsQuery()) ProductsGrid.ItemsSource = loadOp.Entities End Sub End Class
using System.ServiceModel.DomainServices.Client; using AdventureWorksClassLibrary.Web; namespace ExampleSilverlightApp { public partial class MainPage : UserControl { private ProductsDomainContext _productContext = new ProductsDomainContext(); public MainPage() { InitializeComponent(); LoadOperation<Product> loadOp = this._productContext.Load(this._productContext.GetProductsQuery()); ProductsGrid.ItemsSource = loadOp.Entities; } } }
AdventureWorksClassLibrary.Web プロジェクトの App.Config ファイルを開き、
<connectionStrings>
、<system.serviceModel>
、および<httpModules>
の各要素と、それらの要素に含まれる要素をそれぞれコピーします。ExampleSilverlightApp.Web プロジェクトの Web.config ファイルに各要素をそれぞれ貼り付けます。Web.config ファイルは次の例のようになりますが、ファイルにはお使いの環境に関連する接続情報が含まれます。<configuration> <connectionStrings> <add name="AdventureWorksLT2008Entities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="Data Source=example;Initial Catalog=AdventureWorksLT2008;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" /> </connectionStrings> <system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.web> <compilation debug="true" targetFramework="4.0" /> <httpModules> <add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </httpModules> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>
アプリケーションを実行します (F5 キーを押します)。