블로그 이미지
내게 능력 주시는 자 안에서 내가 모든것을 할수 있느니라 - 빌립보서 4 : 13 - happydong

카테고리

Happydong (1363)
프로그래밍 (156)
MUSIC (16)
인물 (3)
Utility (10)
세미나 소식&내용 (22)
IT뉴스 (18)
운동 (830)
CAFE (10)
Life (282)
Total
Today
Yesterday



이 내용은 월간 Web에 2010년 03월호에 기고했던 내용 입니다!!

[바로가기]
실전활용!! - WCF RIA Services 알아보자 (1)
실전활용!! - WCF RIA Services 알아보자 (2)
실전활용!! - WCF RIA Services 알아보자 (3)



DB(Data base) 세팅 및
 
도메인 서비스(Domain Service) 생성

 위에서 프로젝트를 생성하고, WCF RIA Service를 사용하기 위해서 설정하는 방법에 대해서 알아 보았다. 이제는 본격적으로 어떻게 통신을 하며, 어떻게 데이터를 주고 받는지 살펴볼 것 이다. 그러기 위해서는 또한 데이터가 필요한데, 필자 같은 경우는 따로 관리하는 DB가 없기 때문에 SQL Server 2008 Sample DB(AdventureWorksDB) 받아서 사용하였다.

 

웹 프로젝트에 엔티티(Entity)를 지정해주어야 하기 때문에 추가 아이템으로 ADO.NET Entity Data Model를 지정해 주어야 한다. 이 부분은 ASP.NET 개발을 해보셨던 분들이라면 능숙하게 설정하실수 있을 것이라 생각이 든다. 하지만, 처음 접하는 분들을 위해 간단하게 아래 그림을 통해서 생성 및 설정 내용을 설명하도록 하겠다.

 

1.  추가 아이템 창을 열어 ADO.NET Entity Data Model를 선택하고, 적절한 이름을 짖고, 추가를 하면 DB관련 설정 창들이 나타날 것이다.

[
그림5-1] 추가 아이템 창

 

 

2.  미리 만들어 놓은 MS-SQL DB로 연결할 것이기 때문에 Generate from database로 선택을 한후 Next버튼을 클릭한다.

[그림5-2] Entity Data Model 설정 관련 창

 

 

3.  어떤 데이터베이스를 설정할 것인지 선택을 해야하며, 처음 설정하는 것이면 New Connection 버튼을 클릭해서 해당 데이터베이스에 연결을 하도록 한다. 그리고 아래 Connection settings에서는 적절한 이름으로 지정해 주면된다. 나중에 이름 변경할때에는 Web.config 파일에서 수정하면된다. 모든 설정이 끝났으면 Next 버튼을 클릭한다.


[그림5-3] Entity Data Model 설정 관련 창

 

 

4.  다음은, 테이블(Table),(View) ,프로시저(Procedure) 중에서 사용할 것들을 체크로 표시하면 된다. 원하는 내용을 체크후 Finish버튼을 클릭한다.

[그림5-4] Entity Data Model 설정 관련 창

 

 

5.  내가 선택한 데이터들을 확인한다.


[그림5-5] DB테이블 불러온 모습

 

 

[그림5-5]에서와 같이 해당 DB테이블을 불어와서 엔티티를 준비해 두었다면은 이제 도메인 서비스 클래스(Domain Service Class)를 만들어 실버라이트 애플리케이션과 통신할 수 있도록 해야 한다. 도메인서비스는 WCF RIA Service에서 아주 핵심적인 클래스 이며, 생성방법은 아래 그림과 같다.

 

[그림6-1] 추가 아이템 창

 

 [그림6-1]과 같이 추가 아이템 창을 열어서 Domain Service Class를 선택하고 적당한 이름을 주어 추가한다.

 

[그림6-2] 도메인 서비스 설정 창

 

[그림6-2]는 해당 도메인 서비스에서 다룰 엔티티를 설정하는 것이다. 만약 이창에서 DataContexts가 안뜨는 경우, 프로젝트 빌드후 다시 확인하면 보일것이다.여기서 원하는 엔티티를 체크후 Enable client access부분에 체크를 해야한다.(기본적으로 체크되어 있음.) 이 설정으로 인해 클라이언트(실버라이트)가 도메인서비스에 접근이 가능하며, 해당 엔티티 내용이 클라이언트쪽에 생성이 된다. 그리고 Enable editing 체크박스는 기본적인 CRUD(Create, Read, Update, Delete)에 대한 작업을 수행하고 싶다 하면 체크해 주면된다. 필자는 일단 Read, 데이터를 불러 오기만 할 것이므로 체크를 하지 않았다.

 

using문 생략

 

// Implements application logic using the AdventureWorksEntities context.

// TODO: Add your application logic to these methods or in additional methods.

// TODO: Wire up authentication (Windows/ASP.NET Forms) and uncomment the following to disable anonymous access

// Also consider adding roles to restrict access as appropriate.

    // [RequiresAuthentication]

    [EnableClientAccess()]

    public class Currency_DS : LinqToEntitiesDomainService<AdventureWorksEntities>

    {

        // TODO: Consider

        // 1. Adding parameters to this method and constraining returned results, and/or

        // 2. Adding query methods taking different parameters.

        public IQueryable<Currency> GetCurrency()

        {

            return this.ObjectContext.Currency;

        }

    }

[코드 1] 도메인 서비스 코드

 

도메인 서비스 설정 창에서 설정을 다하고 OK버튼을 클릭하면 자동으로 위와 같이 코드가 생성이 된다. 코드를 간단하게 살펴보도록 하자면,

 

- LinqToEntitiesDomainService라는 WCF RIA Service에서 제공하는 추상 클래스를 상속받고, 이는 위에서 만들었던 DataEntities(ADO.NET Entity Data Model)를 사용하고 있는 것을 알수 있을 것이다.

- [EnableClientAccess()]라는 어트리뷰트(Attribute)를 지정해 주어, 클라이언트에서 사용이 가능하도록 설정해 주고 있다.

- GetCurrency()라는 메소드가 자동으로 생성이 되며, 해당 데이터를 리스트형식으로 반환해 준다.

 

[그림6-3] 실버라이트 프로젝트 파일

 

 실버라이트 프로젝트에서 숨겨진 파일까지 보기로 설정후 보면 [그림6-3]과 같이 Generated_Code폴더가 보일 것이다. 이 폴더안에 있는 프록시클래스를 확인해 보면 엔티티클래스가 생성되어 있는 것을 확인할 수 있을 것이다. 또 하나 WCF RIA Service도 알고보면 내부적으로는 WCF 서비스를 사용하고 있다는 것이다. 이를 확인하는 방법은 프록시클래스 코드를 보면 될 것이다.

 

public sealed partial class Currency_DS : DomainContext

{

       

        #region Extensibility Method Definitions

 

        /// <summary>

        /// This method is invoked from the constructor once initialization is complete and

        /// can be used for further object setup.

        /// </summary>

        partial void OnCreated();

 

        #endregion

       

       

        /// <summary>

        /// Default constructor.

        /// </summary>

        public Currency_DS() :

                this(new WebDomainClient<ICurrency_DSContract>(new Uri("Demo-RIAServiceApplication-Web-Currency_DS.svc", UriKind.Relative)))

        {

        }

}

[코드 2] 프록시 클래스 내부 코드

 

위 코드를 보면 Demo-RIAServiceApplication-Web-Currency_DS.svc라는 .svc파일을 호출하고 있음을 알수 있다. 이를 호출해 보면 서비스가 뜨는 것을 확인 할수도 있다.

 

[그림7] 서비스 호출 모습


Posted by happydong
, |