2015-11-04 1 views
1

J'ai un projet WCF qui appelle un autre service web asmx. Quand j'ai ajouté le webservice asmx à wcf Project, il a généré des classes. Maintenant, je veux exposer ces classes comme DataContract et DataMembers à mon service WCF. Je veux vraiment y parvenir sans beaucoup de duplication.Ajout de code généré (généré par wsdl) en tant que DataContracts et DataMembers pour un autre service WCF

Jusqu'à maintenant ce que j'ai essayé Quand j'ai ajouté classe générée comme une propriété (DataMember) à DataContract existant, le client qui appelle le service WCF voir les membres comme variableName terrain. Je ne veux vraiment pas voir ces champs qui sont des variables privées Mais je veux voir des propriétés réelles.

projet WCF contrat On dirait que ce

[DataContract] 
public partial class Person 
{ 

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

     [DataMember] 
     public PersonPay PersonPay {get;set;} 


} 

wsdl code généré dans le projet WCF de wsdl service web ASMX

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")] 
    [System.SerializableAttribute()] 
    [System.Diagnostics.DebuggerStepThroughAttribute()] 
    [System.ComponentModel.DesignerCategoryAttribute("code")] 
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")] 
    public partial class PersonPay : object, System.ComponentModel.INotifyPropertyChanged { 

    private double salaryField; 

     [System.Xml.Serialization.XmlElementAttribute(Order=0)] 
     public bool Salary{ 
      get { 
       return this.salaryField; 
      } 
      set { 
       this.salaryField= value; 
       this.RaisePropertyChanged("Salary"); 
      } 
     } 

} 

Répondre

0

Vous pouvez utiliser le modèle de texte Transformer Toolkit (T4 ou fichiers ..tt) , pour lire les fichiers générés par ASMX appartenant à votre projet, les recréer de la même manière dans un autre espace de nommage en ajoutant les attributs [DataContract] et [DataMember]

Cordialement

+0

Toute autre façon, je ne veux pas faire la génération de code – Praneeth

+0

OK Praneeth, peut être le meilleur pour éliminer le bruit, vous est d'éditer votre question pour vous dire que vous ne voulez pas la génération de code - je efface ma réponse, tu ne penses pas? –

0

Je vois que votre classe PersonPay généré par ASMX sont [Serializable]. Selon mon WCF Guru, Juval Löwy, PersonPay doit être sérialisé comme ils sont au service WCF.

Faites un essai et dites-nous.

Cordialement

+0

Je n'ai pas compris. Je ne peux pas supprimer l'attribut sérialisable car il est généré le code – Praneeth

+0

@Praneeth, il suffit de garder le code généré tel quel. La classe PersonPay devrait être sérialisable par WCF Framework - maintenant vous devez essayer ;-) –

+0

@Praneeth, avez-vous eu le PersonPay pour travailler? –