Управление версиями контракта сообщения WCF

Я хочу добавить новый MessageBodyMember в свой MessageContract, который ссылается на новый Datacontract.

Будет ли проблема?

Каков наилучший способ обработки изменений контракта сообщений?

Как узнать, будет ли добавление нового MessageBodyMember критическим или некритическим изменением?


person Kishore Borra    schedule 26.09.2011    source источник


Ответы (1)


Управление версиями контракта сообщения осуществляется в http://msdn.microsoft.com/en-us/library/ms730255.aspx:

Иногда может потребоваться изменить контракты сообщений. Например, новая версия вашего приложения может добавить к сообщению дополнительный заголовок. Тогда при отправке из новой версии в старую система должна иметь дело с лишним заголовком, а также с отсутствующим заголовком при переходе в другую сторону.

Для заголовков управления версиями применяются следующие правила:

  • WCF не возражает против отсутствующих заголовков — соответствующие элементы оставляются со значениями по умолчанию.

  • WCF также игнорирует неожиданные дополнительные заголовки. Единственным исключением из этого правила является случай, когда атрибут MustUnderstand дополнительного заголовка имеет значение true во входящем сообщении SOAP — в этом случае создается исключение, поскольку заголовок, который должен быть понят, не может быть обработан.

Тело сообщения имеет схожие правила управления версиями — как отсутствующие, так и дополнительные части тела сообщения игнорируются.

Это означает, что вы можете добавлять и удалять MessageBodyMembers, не нарушая совместимости. Будьте осторожны с изменением типов членов. Убедитесь, что они сериализованы одинаково, чтобы оставаться совместимыми.

person kroonwijk    schedule 26.09.2011