다음을 통해 공유


연습: RIA Services 클래스 라이브러리 만들기

이 연습에서는 WCF RIA Services 클래스 라이브러리에 재사용 가능한 구성 요소를 포함하는 Silverlight 응용 프로그램을 만드는 방법을 배웁니다.

WCF RIA Services 클래스 라이브러리를 사용하면 재사용 가능한 중간 계층 및 프레젠테이션 계층 논리를 만들 수 있습니다. 그러나 RIA Services 클래스 라이브러리를 사용하는 것은 RIA Services 솔루션을 만드는 것보다 더 복잡합니다.

예제를 단순화하기 위해 이 연습에서는 Silverlight 응용 프로그램과 동일한 솔루션의 클래스 라이브러리를 보여 줍니다. 클래스 라이브러리는 별도의 솔루션에 존재할 수 있습니다.

RIA Services 클래스 라이브러리의 자세한 배경은 RIA Services 솔루션 만들기 항목의 관련 단원을 참조하십시오.

[!참고] 재사용 가능한 구성 요소를 만들 필요가 없거나 RIA Services 솔루션 만들기를 소개하는 연습을 보려면 연습: RIA Services 솔루션 만들기를 참조하십시오.

필수 구성 요소

WCF RIA Services 설명서에서 제공하는 이 연습 및 다른 연습을 실행하려면 WCF RIA Services 및 WCF RIA Services 도구 키트 외에도 Visual Studio 2010, Silverlight Developer 런타임 및 SDK 등의 몇 가지 필수 구성 요소 프로그램을 올바르게 설치하고 구성해야 합니다. 또한 SQL Server 2008 R2 Express with Advanced Services를 설치하고 구성해야 하며 AdventureWorks OLTP 및 LT 데이터베이스를 설치해야 합니다.

이러한 각 사전 요구 사항을 충족하기 위한 자세한 지침은 WCF RIA Services의 사전 요구 사항 노드의 항목에서 제공합니다. 이 RIA Services 연습을 수행할 때 발생할 수 있는 문제를 최소화하려면 이 연습을 진행하기 전에 여기서 제공하는 지침을 따르십시오.

WCF RIA Services 클래스 라이브러리를 포함하는 Silverlight 솔루션을 만들려면

  1. 파일, 새로 만들기, 프로젝트를 차례로 선택하여 Visual Studio 2010에서 새 RIA Services 프로젝트를 만듭니다.

    새 프로젝트 대화 상자가 나타납니다.

  2. 설치된 템플릿Silverlight 그룹에서 Silverlight 응용 프로그램 템플릿을 선택하고 새 프로젝트의 이름을 ExampleSilverlightApp로 지정합니다.

  3. 새 Silverlight 응용 프로그램 대화 상자에서 응용 프로그램에 대한 WCF RIA Services 사용 상자를 선택하지 않습니다.

    클래스 라이브러리의 프로젝트 간에 RIA Services 링크가 생기기 때문에 Silverlight 응용 프로그램에 Silverlight 프로젝트와 서버 프로젝트 간의 RIA Services 링크가 필요 없습니다.

  4. 솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음 새 프로젝트를 선택합니다.

    새 프로젝트 추가 대화 상자가 나타납니다.

  5. Silverlight 범주 설치된 템플릿에서 WCF RIA Services 클래스 라이브러리 템플릿을 선택하고 이름을 AdventureWorksClassLibrary로 지정합니다.

  6. 확인을 클릭합니다.

    이제 솔루션에 다음 그림과 같이 4개의 프로젝트가 포함됩니다.

  7. ExampleSilverlightApp.Web 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택합니다.

    참조 추가 대화 상자가 나타납니다.

  8. 프로젝트 탭에서 AdventureWorksClassLibrary.Web 프로젝트를 선택하고 확인을 클릭합니다.

  9. ExampleSilverlightApp 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택합니다.

  10. 프로젝트 탭에서 AdventureWorksClassLibrary 프로젝트를 선택하고 확인을 클릭합니다.

중간 계층 라이브러리를 만들려면

  1. AdventureWorksClassLibrary.Web 프로젝트에서 이름이 AdventureWorksModel.edmxADO.NET 엔터티 데이터 모델을 추가합니다. 이를 수행하는 단계는 연습: RIA Services 솔루션 만들기를 참조하십시오.

  2. 엔터티 데이터 모델 마법사에서 엔터티 모델에 Product 테이블을 포함합니다.

  3. Ctrl+Shift+B를 눌러 솔루션을 빌드합니다.

  4. AdventureWorksClassLibrary.Web 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음 새 항목을 선택합니다.

  5. 도메인 서비스 클래스 템플릿을 선택하고 이름을 ProductsDomainService로 지정합니다.

  6. 추가를 클릭합니다.

    새 도메인 서비스 클래스 추가 대화 상자가 나타납니다.

  7. 도메인 서비스를 통해 노출한 사용 가능한 데이터 모델 중 Product를 선택하고 확인을 클릭합니다.

  8. Ctrl+Shift+B를 눌러 솔루션을 빌드합니다.

  9. 솔루션 탐색기에서 각 프로젝트의 모든 파일 표시를 선택합니다.

    AdventureWorksClassLibrary 프로젝트에만 Generated_Code 폴더가 있음을 확인합니다. ExampleSilverlightApp 프로젝트에 대해 코드가 생성되지 않았지만 ExampleSilverlightApp 프로젝트와 AdventureWorksClassLibrary 프로젝트 간에 프로젝트 참조가 존재하기 때문에 AdventureWorksClassLibrary 프로젝트에서 생성된 코드를 계속 사용할 수 있습니다.

Silverlight 프로젝트에서 생성된 코드를 사용하려면

  1. ExampleSilverlightApp 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택합니다.

  2. System.ServiceModel.DomainServices.Client 어셈블리에 대한 참조를 추가합니다.

    어셈블리를 찾으려면 .NET 탭을 선택합니다.

  3. ExampleSilverlightApp 프로젝트에서 MainPage.xaml을 엽니다.

  4. 도구 상자에서 Grid 요소 안으로 DataGrid 컨트롤을 끌어 옵니다.

    XML 네임스페이스와 Data 어셈블리에 대한 참조가 추가됩니다.

  5. 다음 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>
    
  6. MainPage.xaml에 대한 코드 숨김을 엽니다.

  7. 다음 코드를 추가하여 제품을 검색합니다.

    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;
            }
        }
    }
    
  8. 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=&quot;Data Source=example;Initial Catalog=AdventureWorksLT2008;Integrated Security=True;MultipleActiveResultSets=True&quot;" 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>
    
  9. F5 키를 눌러 응용 프로그램을 실행합니다.