2010-10-13 5 views
2

J'ai un service Web et plusieurs clients qui vont l'utiliser. Un site Web MVC 2.0, une application Winforms et des applications potentiellement mobiles. Je comprends que dans le cas des applications mobiles, chaque application devra accéder et gérer la connexion du service Web en interne. Mais qu'est-ce que je fais à propos des applications .net? J'utilise des types composites pour l'objet de requête et le type de retour. Voici un échantillon. Ma première pensée était d'avoir une classe wrapper qui référencerait le service web et serait juste un wrapper. Ensuite, chaque projet doit simplement appeler ma classe wrapper et la connexion et les informations d'identification doivent simplement être configurées dans la configuration web.Meilleure pratique d'architecture pour plusieurs clients utilisant un service Web

Ceci est ma demande abstraite. J'ai toutes les propriétés partagées dont chaque requête aura besoin.

[DataContract] 
    public abstract class RequestBase : IRequest 
    { 
     #region IRequest Members 

     [DataMember] 
     public string ApiKey { get; set; } 

     [DataMember] 
     public string ApiPassword { get; set; } 

     [DataMember] 
     public int PageSize { get; set; } 

     [DataMember] 
     public int PageIndex { get; set; } 

     #endregion 

     public RequestBase() : this(String.Empty, String.Empty) { } 

     public RequestBase(string apiKey, string apiPassword) 
     { 
      ApiKey = apiKey; 
      ApiPassword = apiPassword; 
     } 
    } 

Puis voici la classe qui hérite de ma classe de base.

[DataContract] 
    public class CustomerRequest : RequestBase 
    { 
     [DataMember] 
     public int Id { get; set; } 
    } 

Et voici mon objet Response. J'utilise Generics parce que chaque réponse est la même, sauf pour le type de resultset. Le problème est que lorsque j'ai créé une référence Web, elle a transformé les types acceptés/retournés par mon service en objets proxy. Lorsque j'ai utilisé une référence de service (par opposition à la référence Web), cela a semblé fonctionner mieux, sauf que la référence de service a été exposée, ce qui est loin d'être idéal.

Je cherche des idées qui réduiront la duplication du code.

Répondre

1

N'utilisez aucun! Utilisez WCF pour vous connecter au service Web en créant et en mettant en cache ChannelFactory, puis à chaque fois, créez un proxy. WCF est idéal pour accéder aux services Web. De cette façon, vous n'avez besoin d'aucune référence.

+0

Mon service Web est une application WCF. – Josh

+1

Peu importe. Votre client n'a pas à savoir que même si c'est mieux les deux sont WCF. Je ne suggère donc aucune référence, exposer seulement votre interface à votre client et créer l'usine de canal. – Aliostad

+0

Le problème est que chaque projet doit avoir une référence au contrat de service. Si je change le service, je dois mettre à jour la DLL à chaque client. – Josh

Questions connexes