WCF: обеспечить равные DataContracts с обеих сторон - PullRequest
0 голосов
/ 10 ноября 2009

Мне интересно, возможно ли, чтобы WCF удостоверился, что DataContracts на обеих сторонах соединения одинаковы (и выдает исключение при попытке соединения, если это не так).

Например, представьте себе эту услугу:

[DataContract]
enum State
{
    [EnumMember]
    Red,
    [EnumMember]
    Yellow,
    [EnumMember]
    Green
}

[ServiceContract]
interface MyService
{
    [OperationContract]
    void SetState(State newState);
}

Теперь представьте, что сервис обновлен и теперь поддерживает новое состояние «Orange». У клиента все еще есть DataContract, как показано выше.

Теперь я хочу, чтобы при каждом вызове от клиента к сервису происходил сбой , потому что клиент и служба не используют один и тот же DataContract. Это возможно?

Заранее спасибо за любую помощь!

1 Ответ

2 голосов
/ 10 ноября 2009

Ну, вы не можете сделать все это слишком много - но вы можете создать версию своего контракта данных с пространствами имен XML - что-то вроде этого:

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/11")]
enum State
{
    [EnumMember]
    Red,
    [EnumMember]
    Yellow,
    [EnumMember]
    Green
}

Ваш клиент теперь будет использовать этот контракт данных - с пространством имен XML.

Если вы измените свой контракт данных на сервере в следующем месяце, вы можете изменить пространство имен XML на:

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/12")]
enum State
{
 ....
}

Если вы удалите все конечные точки службы, которые использовали контракт данных "/ 2009/11" и у вас будут только новые конечные точки с новым контрактом данных, клиенты больше не смогут успешно вызывать ваши методы обслуживания (поскольку пространства имен XML из двух DataContracts не совпадают).

Может быть, это будет путь?

Марк

...