繁体   English   中英

WCF - 从 Presenter 层调用 WCF 服务

[英]WCF - Calling the WCF service from the Presenter Layer

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

我需要有关如何从我的 Presenter 层调用 WCF 服务,然后让 Presenter 将数据传递回视图(winforms)的帮助。 我有一个 Windows 表单,其中包含两个名为 txtProductID 和 txtDescription 的文本框。 我还有一个名为 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;                     
        }        
    }
}

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

  1. 您需要将“服务参考”添加到您的表示层项目(这会生成一个代理 class 您可以用来调用您的服务)
  2. 您需要创建生成的代理 class 的实例
  3. 您需要在代理 class 上调用方法并存储其值

在 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM