2010-02-17 5 views
2

Bonjour les gens. Je n'ai jamais posté sur ces types de sites avant, mais laisse voir comment ça se passe.Clients du service WCF

Aujourd'hui j'ai commencé à travailler avec WCF pour la première fois, j'ai regardé quelques screencasts dessus et maintenant je suis prêt à sauter dans ma première solution l'implémentant. Tout va bien et jusqu'ici tout fonctionne, bien que ma question vienne quand je crée le WCFServiceClient dans mon programme/client appelant. Disons dans mon ServiceContract/interface définissant mes méthodes exposées au client, il y a beaucoup de méthodes liées à un objet entité. Comment puis-je regrouper logiquement toutes les méthodes associées d'une entité particulière, de sorte que dans mon code cela ressemble à

par exemple.

WCFServiceClient.Entity1.Insert(); 
WCFServiceClient.Entity1.Delete(); 
WCFServiceClient.Entity1.GetAll(); 
WCFServiceClient.Entity1.GetById(int id); 

WCFServiceClient.Entity2.AddSomething(); 
WCFServiceClient.Entity2.RemoveSomething(); 
WCFServiceClient.Entity2.SelectSomething(); 

...

Au lieu de

WCFServiceClient.Insert(); 
WCFServiceClient.Delete(); 
WCFServiceClient.GetAll(); 
WCFServiceClient.GetById(int id); 
WCFServiceClient.AddSomething(); 
WCFServiceClient.RemoveSomething(); 
WCFServiceClient.SelectSomething(); 

J'espère que cela a du sens. J'ai cherché google, j'ai essayé mon propre raisonnement logique, mais pas de chance. Toute idée serait appréciée.

tir Juan

+0

Bienvenue! Lorsque vous enregistrez du code, cliquez sur le bouton Format Code de la barre d'outils («101») pour le formater correctement. – SLaks

Répondre

0

WCFServiceClient.Entity1.Insert();

WCFServiceClient.Entity2.AddSomething();

Cela sent comme deux interfaces de service distincts - laissez chaque contrat de service (interface) gérer toutes les méthodes dont vous avez besoin pour un seul type d'entité:

[ServiceContract] 
interface IEntity1Services 
{ 
    [OperationContract] 
    void Insert(Entity1 newEntity); 
    [OperationContract] 
    void Delete(Entity1 entityToDelete); 
    [OperationContract] 
    List<Entity1> GetAll(); 
    [OperationContract] 
    Entity1 GetById(int id); 
} 

[ServiceContract] 
interface IEntity2Services 
{ 
    [OperationContract] 
    void AddSomething(Entity2 entity); 
    [OperationContract] 
    void RemoveSomething(Entity2 entity); 
    [OperationContract] 
    SelectSomething(Entity2 entity); 
} 

Si vous voulez, vous pourriez avoir un seul classe de service implémentant réellement les deux interfaces - c'est tout à fait possible et valide. Ou vous pouvez créer deux classes d'implémentation de service distinctes - cela dépend entièrement de vous.

class ServiceImplementation1 : IEntity1Services 
{ 
    // implementation of four methods for Entity1 here 
} 

class ServiceImplementation2 : IEntity2Services 
{ 
    // implementation of three methods for Entity2 here 
} 

Cela aide-t-il du tout?

+0

Ouais, merci beaucoup. Ce que j'ai fait hier était de créer une classe partielle, chaque implémentation de la classe implémentant un contrat de service différent, ainsi que de créer un point de terminaison pour chaque contrat sous le même service. – Juan

2

Vous ne pouvez pas vraiment faire cela. Le mieux que vous puissiez faire est de placer toutes les méthodes "entité 1" dans un contrat de service, et toutes les méthodes "entité 2" dans un autre. Un seul service peut implémenter plusieurs contrats de service.

+0

Cela aurait été mon prochain plan, mais cela signifie que dans mon client, je devrais ajouter une autre référence dans le web.config pour Service2 droit? – Juan

+0

@Juan: non. C'est un service, avec deux contrats. –

+0

Ok, je suis un peu perdu alors. Dans l'éditeur de configuration du service WCF, comment vais-je configurer ce service pour plusieurs contrats? – Juan

Questions connexes