2013-09-28 3 views
4

Я звоню в службу wcf, и его целью является вставка некоторых деталей в таблицу sql-сервера. Я использую транзакции sql и после операции вставки я также фиксирую транзакцию SQL-сервера. Теперь эта услуга вызывается клиентом, который инициировал свою транзакцию и внутри своей транзакции, вызывая эту услугу. Таким образом, мой запрос: -Влияние транзакции SQL в транзакции WCF

Если транзакция выполняется транзакцией транзакции SQL-сервера и некоторое исключение происходит на стороне клиента после вызова другой службы (эта функциональность службы выполняется успешно, но клиент вызывает другую службу wcf, которая вызывает исключение) поэтому вставленные данные будут отброшены в базу данных 1-й службы или нет, и если да, то как это произойдет.

ответ

2

Этот пример появляется отношение к вашему вопросу: Tansactions in WCF

Она имеет клиент, призывающую в 2 WCF услуг в транзакции. Каждая служба сама выдает транзакцию в БД. В примере проверяется случай, когда вызов первого сервера завершается, но затем генерируется исключение - данные из первого вызова не записываются в db, поскольку транзакция клиента откатывается из-за исключения после первого вызова сервера.

Вопрос о том, как это работает, является хорошим, так как кажется, что это элемент волшебства! Я не эксперт в этом (так что, наверное, лучше подождать, чтобы услышать от одного!), И все, что я могу предложить, заключается в том, что когда вы объявляете свой метод WCF [OperationBehavior(TransactionScopeRequired = true)], тогда WCF делает некоторую магию отражения для кода метода для переноса активности базы данных в транзакцию - и он обрабатывает кастинг, который сгенерировал транзакцию обратно в db на исключение, - но я не могу дать представление о деталях этого механизма (я уверен, что кто-то другой может) - вы можете переписать новый вопрос, который будет более четко/непосредственно на этом месте.

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

Обновление: есть подробная информация о том, как TransactionScope работает в этом answer.

+0

Привет, Ricibob, пожалуйста, помогите мне, указав некоторые подробности о том, как это делается wcf – funsukvangdu

1

Операция SQL работает отдельно, и фиксация, выполненная в службе WCF, будет доступна, даже если клиент откатит транзакцию в конце. Я столкнулся с подобной ситуацией и наблюдал вышеупомянутый результат.

Смежные вопросы