Я только что прочитал фантастическую статью о транзакциях и потоке WCF. В значительной степени оставил мне только один без ответа вопрос:
У меня есть один проект с двумя определенными сервисными методами:
ServiceA.svc
[OperationBehavior(TransactionScopeRequired = true)]
OperationA()
ServiceB.svc
[OperationBehavior(TransactionScopeRequired = true)]
OperationB()
OperationA()
необходимо позвонить OperationB()
.
Я могу довольно легко просто сказать new ServiceB().OperationB(...)
изнутри ServiceA
(помните, я сказал, что они находятся в одном веб-проекте, работающем на одном сервере.
Сначала я подумал, что это то, что я буду делать, но я не уверен, что все транзакции будут испорчены или нет - особенно если контракты на транзакции отличались между двумя операциями. Очевидно, что если я получу доступ к Transaction.Current
из OperationB
, он будет существовать, но если бы две операции имели разные контракты (как описано в указанной статье), правила не были бы соблюдены.
Как правильно ServiceA.OperationA()
звонить ServiceB.OperationB()
?
(Интересно также, как это сделать, когда одна операция вызывает другую в том же классе, но это, вероятно, проще для Google)