Я принимаю внешний веб-сервис Вы имеете в виду услугу, которая отображается через общедоступную сеть.
Если внешняя служба поддерживает WS-Atomic Transaction, тогда да, возможно, распространить локальную транзакцию на другую.
Однако сомнительно, если этот подход является разумным, если внешняя служба также не является wcf по отношению к wsHttpBinding.
Если внешняя служба не является wcf, то, скорее всего, в интеграции будет значительная боль; хотя WS-AT предназначен для обеспечения совместимости, на практике почти наверняка будет изменяться то, как протокол интерпретируется различными поставщиками, что может привести к тому, что клиент и служба будут эффективно не взаимодействовать.
Но что произойдет, если он не сработает?
В качестве альтернативного решения я рассмотрел бы шаблон compensatory для решения этой проблемы. В качестве примера:
- Обновление БД
- Позвони
- Если услуга вызова успеха, совершить DB
- Если сбой вызова службы, не совершайте DB
Преимущество здесь в том, что согласованность системы может предоставляться в одном месте. Однако теперь ваша проблема заключается в том, как определить, был ли вызов успешным или нет.
К сожалению, когда вы совершаете служебный вызов, всегда возможен вызов для возврата отказа, но на самом деле это удается. Хорошим примером этого является тайм-аут службы.
Как вы на самом деле говорите, если вы вызвали ошибку? Единственный способ - выполнить поиск по удаленному ресурсу для разработки, если состояние системы включает ваше обновление.
Внешняя услуга также WCF? –
Да, внешняя служба также является WCF. –