2011-05-02 8 views
3

저는 WCF를 처음 사용하며 MVP 디자인 패턴을 배우고 있습니다. WCF 서비스가 작동하는 테스트 프로젝트가 있습니다. 나는 WCF 테스트 클라이언트로 테스트 할 수 있으며 정상적으로 작동한다.WCF - 발표자 레이어에서 WCF 서비스 호출

내 Presenter 레이어에서 WCF 서비스를 호출 한 다음 발표자가 데이터를보기 (winforms)로 다시 전달하는 방법에 대한 도움이 필요합니다. txtProductID 및 txtDescription이라는 두 개의 텍스트 상자가있는 Windows Form이 있습니다. 또한 btnGetProductData라는 버튼이 있습니다. 다음 사항이 발생합니다.

  1. txtProductID 필드에 제품 ID를 입력하겠습니다.
  2. btnGetProductData 단추를 클릭하면 발표자가 WCF 서비스에서 GetProductData 메서드를 호출하고 제품 설명을 양식의 txtProductDescription 필드로 반환해야합니다.

다음은 WCF 서비스 라이브러리에서 관련 코드 :

IProductService.cs 
------------------ 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 

namespace MyWCFServices.ProductService 
{ 
    [ServiceContract] 
    public interface IProductService 
    { 
     [OperationContract] 
     Product GetProductData(string ProductId);  
    } 

    [DataContract] 
    public class Product 
    { 
     [DataMember] 
     public string ProductID { get; set; } 
     [DataMember] 
     public string ProductDescription { get; set; } 

    } 
} 

ProductService.cs 
-------------------- 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 
using MyWCFServices.ProductEntities; 
using MyWCFServices.ProductBusinessLogic; 

namespace MyWCFServices.ProductService 
{ 

    public class ProductService : IProductService 
    { 
     ProductLogic productLogic = new ProductLogic(); 

     public Product GetProductData(string ProductId) 
     { 

      ProductEntity productEntity = productLogic. 
       GetProductData(ProductId); 
      Product product = new Product(); 

      TranslateProductEntityToProductContractData(productEntity, 
       product); 
      return product; 

     } 

     private Product TranslateProductEntityToProductContractData(
      ProductEntity productEntity, Product product) 
     { 

      product.ProductID = productEntity.ProductID; 
      product.ProductDescription = productEntity.ProductDescription; 

      return product;      
     }   
    } 
} 
+2

서비스가 잘 보이는,하지만 문제는 특히, 클라이언트가 있습니까? 예 : 프록시를 만드는 데 문제가 있습니까? 예상 한 것을 반환하지 않습니까? –

답변

1

당신은 문제가있는 곳에 잘 모르겠어요, 그래서 나는 처음에 시작합니다.

  1. 당신은
  2. 당신은 생성 된 프록시 클래스의 인스턴스를 생성해야합니다 (이것은 당신이 당신의 서비스를 호출하는 데 사용할 수있는 프록시 클래스를 생성하는) 당신의 프레젠테이션 계층 프로젝트에 "서비스 참조"를 추가 할 필요가
  3. 당신은 프록시 클래스의 메소드를 호출 및 Visual Studio에서 그 가치

를 저장 프로젝트를 마우스 오른쪽을 클릭하고 선택해야 "서비스 참조 추가"다음 서비스에 대한 엔드 포인트로 이동합니다.

예제 코드 :

// Presentation Tier (button event handler) 
var proxy = new ServiceReference1.ProductServiceClient(); 
var prod = proxy.GetProductData("yourProductID"); 
txtDescription.Text = prod.Description; 
txtProductID.Text = prod.ProductID; // same as passed parameter 
+0

예, 위에서 정의한 프록시 클래스를 사용하기 위해 서비스 참조를 추가해야하며 방금 게시 한 코드에서 사용하려고합니다. – Nate

+0

답장과 예제에 감사드립니다. 귀하의 회신에 관해 질문이 있습니다. Model View Presenter 디자인 패턴을 사용하고 Prensenter 클래스에서 WCF 서비스를 호출해야하므로 Visual Studio를 통해 서비스 참조를 추가 할 수 있습니까? - 또는 - 내가 아래에있는 예제 코드에 표시된대로 수행해야합니까? 참고 : ProductService는 WCF 서비스 클래스의 이름입니다. ProductService productService; productService – Robert

+1

Visual Studio를 통해 서비스 참조를 추가하는 것은 사용중인 프로그래밍 모델과 관련이 없기 때문에 가능합니다. WCF의 초보자가 WinForms 클라이언트에서 사용하는 가장 쉬운 방법 중 하나는 양식의 코드 숨김에서 프록시 인스턴스를 만들고 사용하는 것입니다. –

관련 문제