2011-05-12 1 views
3

En fait, il devrait y avoir une réponse avant droit à cette question (est sur la propriété « Object » ci-dessous):WCF - Objet comme type connu -> interopérable?

Avoir le contrat de données suivantes:

[KnownType(typeof(bool))] 
    [KnownType(typeof(int))] 
    [KnownType(typeof(string))] 
    [KnownType(typeof(Customer))] 
    [KnownType(typeof(Client))] 
    public class Transaction 
    {  
     // properties 
     [DataMember(Name = "UID")] 
     public int UID{} 

     [DataMember(Name = "Type")] 
     public Enums.TransactionType Type{} 

     [DataMember(Name = "Data")] 
     public Object Data{} 
    } 

et le contrat de service suivant:

public interface IService 
{ 
     [OperationContract(Name = "GetData")] 
     List<Transaction> GetTransact(); 
} 

Est-ce que cela sera interopérable? Dire de Java, gSoap? Si non, comment puis-je le rendre interopérable?

Merci.

EDIT: Je veux juste savoir si WCF sait comment sérialiser/désérialiser l'objet de/dans les types connus définis.

Répondre

1

Cela devrait aller aussi bien que le client peut générer les types correctement à partir du WSDL. Par exemple, selon le client, il peut changer le List<Transaction> de C# en Transaction[] ou quelque chose d'assez équivalent. Vous devrez également sélectionner le bon type de liaison. Habituellement basicHttpBinding a les meilleurs résultats pour l'interopérabilité.

+0

Oui, c'est clair ... Mais je veux juste savoir si WCF sait comment sérialiser/désérialiser à partir de l'objet en utilisant les types connus définis. – Learner

+1

Les choses ajoutées en tant que [KnownType] sont là pour indiquer le sérialiseur à leur sujet, et les ajoute également au WSDL. Si le sérialiseur obtient un objet, alors oui il va scanner les KnownTypes pour celui qui convient. Typiquement cela entre en jeu avec l'héritage plus que tout. – CodingWithSpike

+1

Aussi, désolé, je n'ai pas remarqué la première fois que j'ai regardé cela, un de vos membres de données était de type 'Object'. Dans ce cas, je m'attendrais à ce que WCF gère correctement le champ Object 'Data' tant que l'instance réelle est de type' Client' ou 'Client'. Sur la sérialisation, il connaîtrait à partir du type d'instance, sur la désérialisation qu'il connaîtrait du nom de type transmis dans le message SOAP. – CodingWithSpike

Questions connexes