2011-05-02 4 views
3

Je suis nouveau à WCF et j'apprends également le modèle de conception MVP. J'ai un projet de test avec un service WCF fonctionnel. Je suis capable de tester avec le client de test WCF et ça fonctionne bien.WCF - Appel du service WCF à partir de la couche Presenter

J'ai besoin d'aide pour appeler le service WCF à partir de ma couche Presenter et demander au Presenter de renvoyer les données à View (winforms). J'ai un Windows Form avec deux zones de texte nommées txtProductID et txtDescription. J'ai aussi un bouton nommé btnGetProductData. Je voudrais ce qui suit pour se produire:

  1. Je mettrai un identifiant de produit dans le domaine txtProductID.
  2. Je clique sur le bouton btnGetProductData et le présentateur doit appeler la méthode GetProductData à partir du service WCF et renvoyer la description du produit dans le champ txtProductDescription de mon formulaire.

Voici le code pertinent de la bibliothèque de services 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

Votre service a l'air bien, mais quel problème êtes-vous avoir sur le client, en particulier? EG: avez-vous des problèmes pour créer le proxy, cela ne retourne-t-il pas ce que vous attendiez? –

Répondre

1

Je ne sais pas où vous rencontrez des problèmes, donc je vais commencer au début.

  1. Vous devez ajouter un « service de référence » à votre présentation de projet de niveau (ce qui génère une classe proxy que vous pouvez utiliser pour appeler votre service)
  2. Vous devez créer une instance de la classe proxy générée
  3. Vous devez appeler une méthode sur la classe proxy et stocker sa valeur

de Visual studio, cliquez droit sur votre projet et choisissez « Ajouter un service de référence », puis naviguez jusqu'au point final pour votre service.

Exemple de code:

// 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

Oui, vous devez toujours ajouter une référence de service afin d'utiliser la classe de proxy que j'ai définie ci-dessus et que vous essayez d'utiliser dans le code que vous venez de publier. – Nate

+0

merci pour votre réponse et votre exemple. J'ai une question concernant votre réponse. Puisque j'utilise le modèle de conception Model View Presenter et que ma classe Prensenter doit appeler le service WCF, est-ce que j'ajouterais toujours la référence de service via Visual Studio? -OU- Dois-je le faire comme indiqué dans l'exemple de code que j'ai trouvé ci-dessous? Remarque: ProductService est le nom de la classe de service WCF. ProductService productService; productService – Robert

+1

Vous ajouteriez toujours la référence de service via Visual Studio, car elle n'a rien à voir avec le modèle de programmation que vous utilisez. L'un des moyens les plus simples pour un débutant dans WCF de l'utiliser dans un client WinForms est de créer et d'utiliser l'instance de proxy dans le code-behind du formulaire. –

Questions connexes