1. WCF 서비스 구현하기
- 이름을 넣고 WCF 서비스 항목을 선택하여 추가하면 App.config, ProductService.cs 그리고 인터페이스 IProductService.cs 파일이 자동 생성되어 있으며, 샘플 코드는 삭제합니다.
- CRUD 기능 구현을 위해 인터페이스에 메서드 재정의를 선언합니다.
Code
IProductService.cs [ServiceContract]
|
ð 인터페이스 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 서비스 라이브러리에 정의된 것과 같은지 확인합니다. 틀릴 경우 해당 항목을 선택하면
- 위 파트에서 설명한 바가 있지만, Silverlight에서는 바인딩을 basicHttpBinding만 지원하므로 반드시 변경해주여야 합니다.
- 그리고 Contact 속성이 맞게 지정되어 있는지 확인합니다. 틀릴 경우 위에서 했던 방식으로 알맞은 형식 이름을 선택합니다.
3. WCF 서비스 구성이 잘 되어 작동이 이상유무를 확인해 봅니다.
- 실행(F5)를 해보면, 아래와 같이 WCF 테스트 클라이언트 창이 나타나며, 트라이아이콘에 WCF 서비스 호스트 아이콘이 나타나며 구성에는 “이상없음”을 나타냅니다.
- SelectProduct()을 더블클릭 한 후, 별다른 인자가 특별 없기 때문에 우측에 호출 버튼을 클릭합니다. Length에 아마 NorthWind 데이터베이스의 Products테이블의 아이템 개수와 동일하게 나나타나는 것을 볼 수 있습니다.
- 이번에는 InsertProduct()을 더블클릭 한 후, 각 변수의 임의의 값을 넣어주고 호출을 하면 성공시, 응답 화면에 return 값에 true가 나타나며, DB 테이블에 아이템 개수가 한 개 늘어난 것을 볼 수 있습니다.
'RIA Platform' 카테고리의 다른 글
[펌]한글로된 WPF 소개서 (0) | 2009.10.09 |
---|---|
WCF Service를 이용한 Silverlight 활용(4) (0) | 2009.06.29 |
WCF Service를 이용한 Silverlight 활용(2) (0) | 2009.06.29 |
WCF Service를 이용한 Silverlight 활용(1) (0) | 2009.06.29 |
Silverlight 참고 사이트 (0) | 2009.06.29 |