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

카테고리

Happydong (1363)
프로그래밍 (156)
01.C#기초 (4)
02.C#고급 (13)
03.ASP.NET (28)
04.HTML&Script (17)
05.Silverlight (38)
06.C 언어 기초 (2)
07.iOS (14)
08.Java (5)
09.SQL (8)
10.컴퓨터보안 (10)
11.패턴이야기 (3)
12.유니티3D (1)
13.Ubuntu (7)
14.Node.js (6)
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)



ㅁ 도메인 서비스 호출

 

 이제 실버라이트 프로젝트에서 도메인 서비스를 호출하고, 데이터를 받아서 해당 컨트롤에 뿌려주는 작업에 대해서 알아 보도록 하겠다. 기존에 WCF 서비스를 이용하였거나, WebService를 통해서 작업을 해보셨던 분들이라면 금방 익숙해질 것이라고 생각이 든다.

 

<UserControl x:Class="Demo.RIAServiceApplication.MainPage"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    xmlns:Data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"

    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">

    <Grid x:Name="LayoutRoot">

        <Data:DataGrid x:Name="DataGrid1"></Data:DataGrid>

    </Grid>

</UserControl>

[코드 3] MainPage.xaml

 

MainPage.xaml DataGrid 컨트롤은 간단하게 데이터를 호출해서 뿌려주기위해 올려놓은 것이다. 호출 내용은 아래 코드와 같다.

 

 

// using 추가

using Demo.RIAServiceApplication.Web;

using System.Windows.Ria;

 

namespace Demo.RIAServiceApplication

{

    public partial class MainPage : UserControl

    {

        public MainPage()

        {

            InitializeComponent();

 

            // 도메인 서비스 생성

            Currency_DS service = new Currency_DS();

            // 도메인 서비스 로드 및 콜백(Callback)지정

            service.Load<Currency>(service.GetCurrencyQuery(), new Action<LoadOperation<Currency>>(Currency_LoadCompleted), null);

        }

 

// 콜백메소드

private void Currency_LoadCompleted(LoadOperation<Currency> operation)

        {

            // 에러가 있는지 확인

            if (operation.HasError == false)

            {

                // DataGrid ItemSource로 지정

                this.DataGrid1.ItemsSource = operation.Entities;

            }

        }

    }

}

[코드 3] MainPage 코드 비하인드

 

위 코드를 간단하게 설명하자면,

 

- 생성자에서 도메인서비스로 지정한 Currency_DS를 생성후 로드메소드를 구현해 주었다.

 

- service.Load메소드는 해당 서비스를 호출하고 받은 반환값 엔티티쿼리(EntityQuery)를 해당 엔티티클래스로 로드를 해주는 역할을 하는데, 위 코드에서 첫번째 파라미터로 GetCurrencyQuery 메소드를 호출하고 있는 것을 확인 할수 있을 것이다. 이 메소드는 도메인서비스의 GetCurrency메소드와 같다. 두번재 파라미터로는 콜백함수를 지정하였다. 세번재 파라미터는 userstate를 지정하는 것인데 null 지정해도 무관하다.

 

- Currency_LoadCompleted는 콜백메소드로 파라미터로는 LoadOperation<Currency>를 받는다.

LoadOperation<Currency>Entities속성을 DataGird 컨트롤의 ItemsSource로 지정해 주어 데이터를 채워주었다.

 

[그림 7] 프로젝트 실행모습

 

[그림 7]은 지금까지의 작업을 실행해본 모습으로, 도메인 서비스에서 데이터를 잘 받아서 뿌려주고  있음을 보여준다.

 

지금까지 작업을 기존에 서비스참조해서 작업하는 거하고, 얼마나 편해졌는지 대충 감이 왔을 것이라 생각이 든다. 위에서도 말했듯 WCF RIA Service에서는 서비스 참조 같은 작업이 없어서, 서비스를 수정하거나 했을 때 서비스 업데이트하는 번거로운이 일이 없다. 그래서 유지 보수가 편하고, 개발하기가 편하다고 하는 이유이다. 또한, 도메인서비스에서 기본적인 CRUD 작업을 만들어주니 개발해야할 부분이 일부, 약간 줄어든 샘이다. 하지만, 필요에 따라 도메인 서비스부분도 수정되어야 할때도 있을 것이다. 이를 적절이 이용해서 사용하면 개발하기 편리한 서비스가 될 것이다.

Posted by happydong
, |



이 내용은 월간 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
, |




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

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



Silverlight(실버라이트) 프로젝트를 하면서 늘 고민 되었던 부분이 바로 데이터처리 관련이 었을 것이다. 어떻게 데이터를 주고, 받고 할 것인지에 대한 고민은 개발자들에게 늘 있는 문제일 것이다. 물론, 필자 또한 이런 고민을 피할수 없었다.

 

실버라이트는 다양한 방법으로 데이터를 주고 받을수 있도록 구성 되어있다. 다들 알고 있겠지만, Web Service를 통해서 데이터를 주고 받을수 있으며, WCF Service, AJAX 등등 여러가지 방법으로 데이터를 주고 받을수 있음을 아마 여러 프로젝트를 통해서 경험했거나, , 온라인 강좌 등에서 익혔을 것이라 생각이 든다. 이번 연재 내용에서 소개할 WCF RIA Service는 기존의 데이터 통신 방법들 보다 개발 생산성이 좋으며, 여러가지 장점이 있어 소개해 보고자 한다. 그렇다고해서 꼭 실버라이트 애플리케이션을 만들 때 WCF RIA Service로만 작업하는라거는 절대 아니다. 상황에 따라 프로젝트의 성향에 따라 적절히 통신방법을 간구해서 개발하면 좋을 것이다.

 

 

WCF RIA Services 이해

 

 WCF RIA Service를 이야기 하기 앞서 기존의 데이터 통신 방법에 대해서 잠깐 이야기해보려 한다. 기존에는 실버라이트와 데이터를 통신하기 위해서 보통 Web Service WCF Service는 이용해서들 작업하셨으리라 생각이 든다. 물론 필자 또한 WCF Service를 이용해서 주로 개발을 했다. 보통은 이렇게 Web Service 또는 WCF Service를 노출시켜두고 해당 서비스에서 CRUD(Create, Read, Update, Delete) 메소드를 직접 구현해 놓고, 이 서비스를 실버라이트 애플리케이션에서 서비스 참조추가를 통해 연결시켜 데이터를 주고 받았을 것이다. 여기서 끝이나면 문제가 없는데, 상황에 따라 서비스를 변경하거나, 서비스를 다시 퍼블리시(Publish)할 경우가 생기면 여러가지 귀찮은 작업을 해야한다. 먼저, 서비스를 새로 퍼블리시해서 IIS에 올리고 잘 작동하는지 확인후 실버라이트 애플리케이션에서 참조되어 있는 서비스를 다시 업데이트를 해야하고, 이를 다시 재 배포를 해야한다. 이런 작업이 한번만에 끝나면 좋으련만 프로젝트를 진행하다보면 그렇지 않은 경우가 정말 많다.

 

 WCF RIA Service는 위와 같은 문제를 간단하게 해결해주고 있다 . WCF RIA Service는 기본적으로 층(Tier)화해서 개발하도록 하고 있다. 이는 .NET 개발자들에게 익숙한 내용일 것이라 생각이 든다. 클라이언트 층(View Layer)와 데이터 로직을 담당하는 서버층(Business Layer)를 나눠어 개발을 해서 관리하기가 편하고, 따로 서비스 참조를 걸어 주는 것이 없어서 수정시 위와 같은 복잡한 절차를 걷히지 않고, 실버라이트 애플이케이션만 배포하면 되기 때문에 유지보수도 편한면이 있다.

 

[그림1] WCF RIA Services 구조

 

위 그림은 WCF RIA Service의 통신 방법을 보여 주고 있는 모습인데,Web Service와 통신도 가능하지만,  비즈니스(Business)로직과 바로 통신도 가능하다. 이는 도메인서비스클래스(Domain Service Class)를 이용해야 한다. 이 내용은 아래 예제를 통해서 알아 보도록 하겠다.

 

 

WCF RIA Services 사용

 

먼저, WCF RIA Service를 사용하기 위해서는 Silverlight.net 사이트에서 WCF RIA Services Beta를 받아야 할것이다. 물론, 실버라이트4를 위한 WCF RIA Services Preview도 있다. 현재 개발환경에 맞는 것으로 다운로드 받아 설치해서 사용하면 될 것이다. 필자는 실버라이트 3 환경이기때문에 Beta버전을 받아 사용하고 있다. 

[그림2] 다운로드 사이트

 

WCF RIA Services를 설치하면 특별하게 템플릿이 추가되는게 아니여서 제대로 설치가 된 것인지 잘 모를것이다. 정상적으로 설치가 되었는지 확인하는 방법은 비주얼 스트디오(Visual Studio)에서 실버라이트 프로젝트를 생성하면 아래와 같은 창이 나타날 것이다.

 

[그림3] 프로젝트 생성관련 창

 

 위 창에서 Enable .NET RIA Services라고 체크 항목이 나타나면 정상적으로 설치 된것이다. .NET RIA Services WCF RIA Services의 이전 이름이다. 이름에 혼돈이 없으시길 바라며, 위 창에서 모르고 체크하는 것을 깜박하고 프로젝트를 생성해 버렸다면, 실버라이트 프로젝트 속성(Properties)에서 .NET RIA Services 를 해당 웹프로젝트로 설정해주면 된다.

[그림4] 실버라이트 프로젝트 속성(Properties)


Posted by happydong
, |