Dans WCF, les données du contrat classes héritent l'un de l'autre?
Dans un service WCF, j'ai deux classes avec le [DataContract] attribut. L'une de ces classes dispose d'un "est-un" de la relation avec l'autre - si la classe B hérite de la classe A. Cependant, lorsque je configure l'héritage entre ces deux classes, les deux notée avec un [DataContract] attribut, les métadonnées ne parvient pas à charger lors de l'essai de services.
Est-ce possible dans WCF? Ai-je raté un autre attribut?
[DataContract]
public class A
{
[DataMember]
public MyCustomType AValue1{ get; set; }
[DataMember]
public MyCustomType AValue2 { get; set; }
}
[DataContract]
public class B: A
{
[DataMember]
public double BValue1{ get; set; }
[DataMember]
public double BValue2 { get; set; }
}
REMARQUE: Les types personnalisés sont également définis à l'aide de contrats de données.
Mise à JOUR: ci-Dessous le message d'erreur:
Erreur: Impossible d'obtenir les Métadonnées à partir de http://localhost:8002/GISDataServices/mex Si c'est un Windows (R) de la Communication de la Fondation de service auquel vous avez accès, veuillez vérifier que vous avez activé la publication des métadonnées à l'adresse spécifiée. Pour obtenir de l'activation d'édition de métadonnées, veuillez vous référer à la documentation MSDN à l' http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Échange d'Erreur URI: http://localhost:8002/GISDataServices/mex de Métadonnées contient une référence qui ne peut pas être résolu:"http://localhost:8002/GISDataServices/mex'.
Receivera:InternalServiceFault
Le serveur n'a pas pu traiter la demande en raison d'une erreur interne. Pour plus d'informations sur l'erreur, soit tourner sur IncludeExceptionDetailInFaults (soit à partir de ServiceBehaviorAttribute ou de la <serviceDebug> configuration du comportement) sur le serveur pour envoyer à l'exception de l'information vers le client, ou activer la fonction de traçage comme par Microsoft .NET Framework 3.0 documentation du kit de développement et d'inspecter les journaux de trace du serveur.HTTP GET Erreur URI: http://localhost:8002/GISDataServices/mex Il y a une erreur de téléchargement 'http://localhost:8002/GISDataServices/mex'. La demande a échoué avec l'état HTTP 400: Bad Request.
Mise à JOUR 2: Voir ma réponse ci-dessous.
Vous devez vous connecter pour publier un commentaire.
Oui, mais vous avez besoin pour décorer la classe de base avec le [KnownTypeAttribute] la construire avec la dérivée de la classe type. Par exemple:
Ok, j'ai compris la question. La réponse est...je suis un idiot. Il n'avait rien à voir avec l'héritage. Dans la classe de base, j'ai eu un contrat de données des membres, sans un ensemble de clauses de propriété - seulement un "get". Doh!!! Mettre dans un " set " de la clause de le faire fonctionner comme un charme.
Désolé pour la confusion.
Basé sur ce test, il devrait fonctionner correctement. Faire les deux classes ont des Constructeurs par Défaut? Êtes-vous à l'aide de Auto-Propriétés. Remarque, Dans cet échantillon de base les Attributs ne sont pas nécessaires. Aussi, comme David Morton mentionné vous en fonction de l'élément que vous êtes de retour, vous devez avoir KnownType attribut, je ne suis pas à 100% mais le type connu pourriez avoir à aller sur le contrat d'opération.