WCF - вызов службы WCF с уровня презентатора - PullRequest
3 голосов
/ 02 мая 2011

Я новичок в WCF и изучаю шаблон проектирования MVP.У меня есть тестовый проект с работающим сервисом WCF.Я могу проверить с клиентом тестирования WCF, и он работает нормально.

Мне нужна помощь в том, как вызвать службу WCF из моего уровня Presenter, а затем сделать так, чтобы Presenter передавал данные обратно в View (winforms).У меня есть форма Windows с двумя текстовыми полями с именами txtProductID и txtDescription.У меня также есть кнопка с именем btnGetProductData.Я хотел бы, чтобы произошло следующее:

  1. Я добавлю идентификатор продукта в поле txtProductID.
  2. Я нажму кнопку btnGetProductData, и докладчик должен вызвать метод GetProductData изСлужба WCF и возврат описания продукта в поле 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 Ответ

1 голос
/ 02 мая 2011

Я не уверен, где у вас возникли проблемы, поэтому я начну с самого начала.

  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...