2009-05-19 5 views
0

J'ai un service WCF qui génère des objets Entity Framework (ainsi que d'autres structures et classes simples utilisées pour alléger la charge) et les envoie à une application cliente.Envoi d'une définition d'interface sur le réseau (service WCF)

J'ai modifié 2 des classes pour implémenter une interface afin que je puisse les référencer dans mon application en tant que type d'objet unique. Tout comme cet exemple: Is it Possible to Force Properties Generated by Entity Framework to implement Interfaces?

Cependant, le type d'interface est pas ajouté à mon service WCF thingymebob client proxy car il n'est pas référencé directement dans les objets qui sont renvoyés sur le fil.

Par conséquent, dans mon application qui utilise les classes de proxy de service, je ne peux pas jeter ou faire référence à mon interface ..

Toutes les idées que je suis absent?

Voici quelques exemples de code:

//ASSEMBLY/PROJECT 1 -- EF data model 

namespace Model 
{ 
    public interface ISecurable 
    { 
     [DataMember] 
     long AccessMask { get; set; } 
    } 

    //partial class extending EF generated class 
    //there is also a class defined as "public partial class Company : ISecurable" 
    public partial class Chart : ISecurable 
    { 
     private long _AccessMask = 0; 
     public long AccessMask 
     { 
      get { return _AccessMask; } 
      set { _AccessMask = value; } 
     } 

     public void GetPermission(Guid userId) 
     { 
      ChartEntityModel model = new ChartEntityModel(); 
      Task task = model.Task_GetMaskForObject(_ChartId, userId).FirstOrDefault(); 
      _AccessMask = (task == null) ? 0 : task.AccessMask; 
     } 
    } 
} 

//ASSEMBLY/PROJECT 2 -- WCF web service 
namespace ChartService 
{ 
    public Chart GetChart(Guid chartId, Guid userId) 
    { 
     Chart chart = LoadChartWithEF(chartId); 
     chart.GetPermission(userId); //load chart perms 
     return chart; //send it over the wire 
    } 
} 
+0

Utilisez-vous une référence de service ou une référence Web dans le client? Est-ce que le projet 1 fait référence au projet 2? Je crois que la référence de service réutilisera les types référencés par défaut. – JohnOpincar

+0

Je ne référence pas les types de l'application Service directement dans mon application client. J'avais déjà pensé à le faire plus tôt, mais j'ai décidé de garder le mur entre les deux applications pour minimiser la dépendance. Si j'allais inclure des références à des projets EF/WCF, je pourrais tout aussi bien l'écrire comme une application. – misteraidan

Répondre

1

interfaces ne seront pas apparaître comme des entités distinctes dans votre WSDL - ils vont tout simplement leurs méthodes et propriétés ajoutées à l'objet qui les expose.

Ce que vous voulez accomplir vous pouvez faire en utilisant des classes abstraites. Ceux-ci apparaîtront comme des entités distinctes.

Bonne chance. Dites-nous comment vous avez décidé de procéder.

+0

vous avez raison, il n'y a pas de réponse à ce problème. Une structure d'entité partielle ne peut pas hériter d'une classe abstraite (ou d'une classe d'ailleurs, qui ne fait pas partie du même modèle d'entité). Donc, dans mon modèle, j'utilise toujours l'interface pour garder ma structure triée, mais dans mon application cliente, j'utilise simplement la réflexion pour vérifier les propriétés (il n'y en a que 2) et renvoyer les objets à l'aveugle. Les méthodes de service WCF échoueront quand même si le paramètre d'objet invalide lui est passé de toute façon ... pas de biggy. Cheers. – misteraidan

Questions connexes