1.     WCF 서비스 구현하기

-      이름을 넣고 WCF 서비스 항목을 선택하여 추가하면 App.config, ProductService.cs 그리고 인터페이스 IProductService.cs 파일이 자동 생성되어 있으며, 샘플 코드는 삭제합니다.

-       CRUD 기능 구현을 위해 인터페이스에 메서드 재정의를 선언합니다.

Code

IProductService.cs

[ServiceContract]
public interface IProductService
{
    [OperationContract]
    bool InsertProduct(Products product);

    [OperationContract]
    bool UpdateProduct(Products product);

    [OperationContract]
    bool DeleteProduct(string name);

    [OperationContract]
    List<Products> SelectProduct();
}

ð  인터페이스 IProductService.cs 상단 부분에 보면 [ServiceContract]이라는 속성이 명시되어 있습니다. WCF 응용 프로그램의 서비스 계약을 정의하는 것으로, 반드시 선언하여야 합니다.

ð  메서드 재정의 부분에 [OperationContract]이라는 속성이 명시되어 있으며, WCF 응용 프로그램의 서비스 계약의 일부인 작업을 정의합니다.

-       CRUD(Insert, Update, Delete, Select) 로직을 구현합니다.

Code

ProductService.cs

namespace WCFServiceLibrary

{

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

    public class ProductService : IProductService

    {

        NorthwindDBDataContext dc = new NorthwindDBDataContext();

 

        public bool InsertProduct(Products product)

        {

            try

            {

                dc.Products.InsertOnSubmit(product);

                dc.SubmitChanges();

 

                return true;

            }

            catch { return false; }

        }

 

        public bool UpdateProduct(Products product)

        {

            try

            {

                var target = (from tmp in dc.Products

                              where tmp.ProductID == product.ProductID

                              select tmp).Single();

               

                target.ProductID = product.ProductID;

                target.ProductName = product.ProductName;

                target.SupplierID = product.SupplierID;

                target.CategoryID = product.CategoryID;

                target.QuantityPerUnit = product.QuantityPerUnit;

                target.UnitPrice = product.UnitPrice;

                target.UnitsInStock = product.UnitsInStock;

                target.UnitsOnOrder = product.UnitsOnOrder;

                target.ReorderLevel = product.ReorderLevel;

                target.Discontinued = product.Discontinued;

                dc.SubmitChanges();

 

                return true;

            }

            catch { return false; }

        }

 

        public bool DeleteProduct(string name)

        {

            try

            {

                var target = (from tmp in dc.Products

                              where tmp.ProductName.Equals(name)

                              select tmp).ToList();

 

                dc.Products.DeleteOnSubmit(target[0]);

                dc.SubmitChanges();

 

                return true;

            }

            catch { return false; }

        }

 

        public List<Products> SelectProduct()

        {

            var target = (from tmp in dc.Products

                          select tmp).ToList();

 

            return target;

        }

    }

}

ð  클래스 상단 부분에 [ServiceBehavior]이라는 속성이 명시되어 있으며, 서비스 계약 구현의 내부 실행 동작을 지정합니다. InstanceContextMode는 들어오는 메시지에 포함된 호출을 처리할 수 있는 서비스 인스턴스 수를 지정합니다. WCF 서비스 구현에 중요한 요소이므로 자세히 알아보겠습니다.

모드

설명

Single

개체가 들어오는 모든 호출에 대해 사용되며 호출 후에는 재활용되지 않습니다. 서비스 개체가 없는 경우 새로 만들어집니다. (공유개념)

PerCall

매번 호출하기 전에 만들어지고 매번 호출한 후에 재활용됩니다. 채널에서 세션을 만들지 않으면 이 값은 PerCall인 것처럼 동작합니다. (비동기인 Silverlight에서는 의미없는 모드라고 볼 수 있습니다.)

PerSession

각 세션마다 개체가 만들어집니다. (클라이언트가 더 이상 필요로 하지 않을 때까지 인스턴스가 존재합니다.)

ð  LINQ에 대한 MSDN Library 링크

2.    빌드(F6), App.config 파일 수정 (해당 기능 꼭 알아두기)

-       해당 파일을 열어 수정하는 방법도 있지만, WCF 구성 편집 항목을 이용하여 편집해보겠습니다.

-      App.config 파일에 마우스 오른쪽 버튼을 클릭하면 WCF 구성 편집 항목을 선택합니다.

-       WCF 구성 편집 창이 나타나며, WCF 서비스 라이브러리에 정의된 것과 같은지 확인합니다. 틀릴 경우 해당 항목을 선택하면 <!--[if !vml]--><!--[endif]-->이 나타나는데 클릭합니다. 그리고, bin폴더/Debug폴더 안에 WCFServiceLibrary.dll을 선택한 후, 알맞은 형식 이름을 선택하시면 자동으로 변경됩니다.

-       위 파트에서 설명한 바가 있지만, Silverlight에서는 바인딩을 basicHttpBinding만 지원하므로 반드시 변경해주여야 합니다.

-       그리고 Contact 속성이 맞게 지정되어 있는지 확인합니다. 틀릴 경우 위에서 했던 방식으로 알맞은 형식 이름을 선택합니다.

3.     WCF 서비스 구성이 잘 되어 작동이 이상유무를 확인해 봅니다.

-       실행(F5)를 해보면, 아래와 같이 WCF 테스트 클라이언트 창이 나타나며, 트라이아이콘에 WCF 서비스 호스트 아이콘이 나타나며 구성에는 이상없음을 나타냅니다.

-       SelectProduct()을 더블클릭 한 후, 별다른 인자가 특별 없기 때문에 우측에 호출 버튼을 클릭합니다. Length에 아마 NorthWind 데이터베이스의 Products테이블의 아이템 개수와 동일하게 나나타나는 것을 볼 수 있습니다.

-       이번에는 InsertProduct()을 더블클릭 한 후, 각 변수의 임의의 값을 넣어주고 호출을 하면 성공시, 응답 화면에 return 값에 true가 나타나며, DB 테이블에 아이템 개수가 한 개 늘어난 것을 볼 수 있습니다.

+ Recent posts