2009-09-25 4 views
0

Я знаю, что этот вопрос задан до here, но все же я не уверен, что выбрать.Предоставление услуг внешним системам - Как мне разработать контракт?

Мое обслуживание будет называться от многих сторонних систем на предприятии. Я почти уверен, что информация, которую служба будет собирать (MyBigClassWithAllInfo), изменится во время жизни продукта. Разве хорошая идея разоблачить объекты?

Это в основном то, что мои две альтернативы:

[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; } 
} 

Файл XML будет выглядеть следующим образом:

< XML версия = " 1,0 " кодирования = " UTF-8 "? > < Сообщение >   < Заголовок >     <InfoAboutTheSender> ... </InfoAboutTheSender >   </Header >   <StuffToCollectWithAllTheInfo>   <stuff1> ... </stuff1 > </StuffToCollec tWithAllTheInfo > </Сообщение >


Любая мысль о том, как эта услуга должна быть реализована?

Благодаря Larsi

ответ

0

Если информация будет меняться в течение жизни, но вы под прицелом, чтобы получить что-то там, я бы просто создать сообщение, которое было список типов вариантов, которые могут быть отправлены вместе с номер версии типа сообщения. Ваша шина может просмотреть номер версии и соответствующим образом перенаправить ее. Таким образом, клиентам, которые застряли со старыми версиями сообщения, не придется менять интерфейс сообщений, который они используют.

+0

Ну, вы получили это абсурдно правильно (о пистолете). Я не уверен, что вы делаете по вариантам? Предполагаете, что я использую какое-то общее поле1, поле2, поле3 вместе с полем типа сообщений? В настоящее время мой сервис будет собирать около 30 полей, и я ожидаю, что он будет расти. – Larsi

+0

Да. Итак, то, что вы открываете миру, будет чем-то вроде хэш-карты. Затем, как только вы создадите такую ​​открытую структуру xml, вы можете проверить поля, типы и т. Д. На основе передаваемой версии сообщения. –

+0

Кроме того, проверьте сообщение Уди Дахана по обслуживанию и управлению версиями контрактов по адресу http: // www .udidahan.com/2009/04/10/назад-совместимости почему-самые-управления версиями-проблемы-arenrsquot / – lasseeskildsen