2009-09-25 6 views
0

Je sais que cette question a été posée avant here mais je ne sais pas encore quoi choisir.Exposer un service à des systèmes externes - Comment concevoir le contrat?

Mon service sera appelé à partir de nombreux systèmes 3 parties de l'entreprise. Je suis presque sûr que les informations que le service collectera (MyBigClassWithAllInfo) changeront pendant la durée de vie des produits. Est-ce toujours une bonne idée d'exposer des objets?

Ceci est essentiellement ce que mes deux alternatives:

[ServiceContract] 
public interface ICollectStuffService 
{ 
    [OperationContract] 
    SetDataResponseMsg SetData(SetDataRequestMsg dataRequestMsg); 
} 

// Alternative 1: Put all data inside a xml file 
[DataContract] 
public class SetDataRequestMsg 
{ 
    [DataMember] 
    public string Body { get; set; } 
    [DataMember] 
    public string OtherPropertiesThatMightBeHandy { get; set; } // ?? 
} 
// Alternative 2: Expose the objects 
[DataContract] 
public class SetDataRequestMsg 
{ 
    [DataMember] 
    public Header Header { get; set; } 
    [DataMember] 
    public MyBigClassWithAllInfo ExposedObject { get; set; } 
} 

public class SetDataResponseMsg 
{ 
    [DataMember] 
    public ServiceError Error { get; set; } 
} 

Le fichier XML ressemblera à ceci:

< xml version = " 1.0 " encoding = utf-8 " "? > <message>   < tête >     <InfoAboutTheSender> ... </InfoAboutTheSender >   </tête >   <StuffToCollectWithAllTheInfo>   <stuff1> ... </stuff1 > </StuffToCollec tWithAllTheInfo > </message >


Toute pensée sur la façon dont ce service devrait être mis en œuvre?

Merci Larsi

Répondre

0

Si l'information va changer au cours de la durée de vie, mais vous êtes sous le canon pour obtenir quelque chose là-bas, je voudrais simplement créer un message qui avait une liste de types de variantes qui pourraient être envoyé en même temps un type de message numéro de version .. Votre bus peut afficher le numéro de version et l'acheminer de manière appropriée. De cette façon, les clients qui sont bloqués avec des versions plus anciennes du message n'auront pas à changer l'interface de message qu'ils utilisent.

+0

Eh bien, vous l'avez eu absoulutt correct (sur le pistolet). Je ne suis pas sûr de ce que vous meen par types de variantes? Est-ce que je suggère d'utiliser un champ général1, un champ2, un champ3, ainsi qu'un champ de type de message? Actuellement, mon service va collecter environ 30 champs, et je m'attends à ce qu'il se développe. – Larsi

+0

Ouais. Donc ce que vous exposerez au monde ressemblera à un hashmap. Ensuite, une fois que vous avez ouvert ce type de structure xml ouverte, vous pouvez valider les champs, les types, etc. en fonction de la version du message. –

+0

En outre, consultez la publication d'Udi Dahan sur le service et la gestion des versions sur http: // www .udidahan.com/2009/04/10/rétrocompatibilité-pourquoi-most-versioning-problems-arenrsquot / – lasseeskildsen

Questions connexes