2012-10-23 4 views
0
class MyCommonClass 
{ 
//properties 
} 

Cette classe doit être accessible àpartage classe commune dans le projet WCF

  1. projet de service
  2. projet WCF-client
  3. l'autre pour lequel ils sont des références. Dans ce projet commun je ne peux pas générer de servicereferences.

Je pense, je pourrais ne pas générer MyCommonClass dans ServiceReferences mais comment marquer la classe pour être non sérialisable? Dans les propriétés, il y a IgnoreDataMemberAttribute. J'ai aussi essayé la réutilisation MyCommonClass de type projet commun situé dans, mais il est encore généré

MISE À JOUR

En d'autres mots: si un type est utilisé dans ServiceOperation il est généré automatiquement dans le document WSDL. Comment le désactiver? (Je ne le veux pas du coté de wcf-client)

Répondre

0

On ne sait pas si la classe commune doit faire partie d'un contrat de service WCF afin qu'elle puisse être mise à la disposition de tout client via le document WSDL ou si vous essayez rend la classe commune accessible à la fois au service WCF et au client WCF en tant que classe .NET standard. La seule raison de partager une classe .NET standard entre le service et le client est de fournir un accès à la logique partagée. Sinon, marquez simplement cette classe avec DataContract ou Serializable pour que le service expose la classe au client via WSDL. Rappelez-vous que l'un des four tenets of SOA est de partager des types (WSDL) et non des classes (assemblages .NET). En fonction de la question mise à jour, vous pouvez obtenir un meilleur contrôle sur ce que WCF sérialise en XML de savon en forçant WCF à utiliser le XmlSerializer au lieu de DataContractSerializer par défaut. En outre, vous pouvez découpler les objets de modèle de domaine des objets exposés par le service WCF, comme indiqué dans this SO question and answers. Ce excellent blog post explique les différences entre les deux sérialiseurs et comment forcer WCF à utiliser le XmlSerializer.

+0

MyCommonClass est utilisé dans certaines classes abstraites etc, qui ne sont pas supportées par le document wsdl (les classes abstraites sont générées dans wsdl comme les classes standard). De plus, ces classes abstraites et leurs dérivées ne sont pas utilisées dans la méthode ServiceOperation, elles ne peuvent donc pas être générées dans le document wsdl mais marquées comme OperationContract – Saint

+0

WCF est une abstraction sur une architecture client/service basée sur un message. Ce n'était pas un design en tant que framework orienté objet distribué, c'est pourquoi les types abstraits ne sont pas vraiment supportés. L'approche que vous essayez est mal prise en charge dans WCF. Pensez à WCF comme une abstraction orientée objet sur un modèle d'échange de messagerie XML (soap). Vous essayez de pousser une abstraction orientée objet à travers un modèle d'échange de messages XML. –

+0

Vous ne comprenez pas. Je sais cela. Je ne vais pas pousser la structure abstraite sur wcf. J'ai besoin de partager une classe dans un projet commun et je ne voudrais pas sérialiser ce type de document wsdl. Je cherche de tels attributs ou d'une autre manière – Saint

Questions connexes