WCF - 从Presenter层调用WCF服务

时间:2011-05-02 16:29:25

标签: .net wcf mvp

我是WCF的新手,我也在学习MVP设计模式。我有一个带有工作WCF服务的测试项目。我能够使用WCF测试客户端进行测试,并且工作正常。

我需要有关如何从Presenter层调用WCF服务,然后让Presenter将数据传递回View(winforms)的帮助。我有一个Windows窗体,其中包含两个名为txtProductID和txtDescription的文本框。我还有一个名为btnGetProductData的按钮。我希望发生以下情况:

  1. 我会将产品ID放在txtProductID字段中。
  2. 我将点击btnGetProductData按钮,演示者应该从WCF服务调用GetProductData方法,并将产品描述返回到表单上的txtProductDescription字段。
  3. 以下是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;                     
            }        
        }
    }
    

1 个答案:

答案 0 :(得分:1)

我不确定你在哪里遇到问题,所以我会从头开始。

  1. 您需要在Presentation Tier Project中添加“服务参考”(这会生成一个可用于调用服务的代理类)
  2. 您需要创建生成的代理类的实例
  3. 您需要在代理类上调用方法并存储其值
  4. 在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