WCF ( ВКФ ):Принудительно заключайте равные контракты с данными с обеих сторон

StackOverflow https://stackoverflow.com/questions/1706912

Вопрос

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

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

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

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

Теперь представьте, что сервис обновлен и теперь поддерживает новое состояние - "Оранжевый".У клиента все еще есть DataContract, как показано выше.

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

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

Это было полезно?

Решение

Ну, на самом деле вы не можете сделать всего этого, но вы могли бы изменить свой контракт с данными с помощью пространств имен 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 не совпадают).

Может быть, это был бы выход?

Марк

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top