2009-07-01 12 views
3

J'ai eu le problème, qu'un service WCF (généré avec svcutil.exe) génère ses propres types de données, au lieu d'utiliser ceux que j'ai déjà définis ..WCF Service Client avec svcutil (aucun client "extra" clientide-datatype def.)

par exemple:

le svcutil généré quelque chose comme ceci:

public partial class EmailTransactionRequestMsg : object, System.Runtime.Serialization.IExtensibleDataObject 
{ 

    private System.Runtime.Serialization.ExtensionDataObject extensionDataField; 

    private int bit_to_setField; 

    private string country_db_identifierField; 
. 

. 
} 

quand je veux réellement utiliser la classe existe déjà:

[DataContract(Namespace = "Ps.App.Mailing.MsgQueue.MsgInterfaces")] 
public class EmailTransactionRequestMsg 
{ 
    [DataMember] 
    public string country_db_identifier; 

    [DataMember] 
    public int bit_to_set; 

} 

Je vois que le service svcutil crée un nouveau ExtensionData champ (que je ne sais pas dans quel but cela est nécessaire)

Alors, comment puis-je obtenir svcutil utiliser ma propre classe (parce que je n » t veulent lancer les objets par chaque champ)

Merci à tous!

Répondre

4

S'il vous plaît prendre un lookat la référence svcutil suivante:

http://msdn.microsoft.com/en-us/library/aa347733.aspx

en particulier le/référence: interrupteur qui doit être exactement ce que vous cherchez.

Je vois que le service svcutil crée un nouveau ExtensionData champ (que je ne sais pas dans quel but cela est nécessaire)

Ceci est généré pour vous aider avec les données le versionnement des contrats. Si vous ajoutez une nouvelle propriété à EmailTransactionRequestMsg plus tard, mais qu'un client utilise un assembly plus ancien sans cette propriété, il pourra toujours utiliser le nouveau service et ExtensionDataObject contiendra des propriétés (nouvelles) inconnues. Encore une fois MSDN devrait vous sprovide avec plus de détails: http://msdn.microsoft.com/en-us/library/system.runtime.serialization.extensiondataobject.aspx

+0

Salut, grâce qui était ma première tentative aussi, mais si je fais référence:/référence: il y a encore une nouvelle classe générée dans le client . Même si j'ai dérivé la classe de IExtensibleDataObject .. – David

+0

Oh, je vois que le client n'est même pas généré si j'ajoute la référence .. – David

+0

Veuillez ajouter l'invocation svcutil à votre message. Aussi du haut de ma tête si vous voulez réutiliser les contrats de données, mettez-les tous dans un assemblage séparé et référencez-les dans svc util. –