Transações no Workflow
Estou tentando usar transações no workflow através do componente Transaction Scope. Eu tenho um WF que chama outro WF, quando adicionei o Transaction Scope, recebi a seguinte mensagem de erro no componente invokeWorkflow: InvokeWorkflowActivity cannot be used inside TransactionScopeAcvity. Não é possível utilizar dessa forma? Como posso passar a transação de um WF para o outro?
terça-feira, 25 de agosto de 2009 14:31
Marcos boa tarde!
Imagine o seguinte cenário - Você recebe uma nova compra e abre uma transação para inserir os dados e invoca o WF para gerar as parcelas, que consegue inserir e realizar o commit. Neste momento a execução volta para o WF de Compra que ao finalizar o processo executa um rollback no WF de Compra e no WF da Parcela. A pergunta que fica é : A sua solução consegue passar por este caso? Se sim a solução que você deu funciona perfeitamente, mas se a resposta for não, você está apenas abrindo duas transações independentes. Neste caso eu tentaria utilizar o WF de Parcelas dentro de um serviço WCF, sendo invocado dentro e um escopo de transação no WF de Compra.
Marcado como Resposta Marcos Aguiar Jr terça-feira, 8 de setembro de 2009 19:53
quinta-feira, 27 de agosto de 2009 17:09
Segue o link para o site da Microsoft falando sobre o InvokeWorkflowActivity :http://msdn.microsoft.com/en-us/library/ms735829.aspx
Neste site existe uma nota sobre a sua pergunta:
"An InvokeWorkflowActivity cannot be contained in a TransactionScopeActivity or a CompensatableTransactionScopeActivity. This is because a transaction cannot flow from one workflow to another. If an attempt is made to contain an InvokeWorkflowActivity inside a TransactionScopeActivity or a CompensatableTransactionScopeActivity, a validation error occurs that contains the following message: Activity 'invokeWorkflowActivity1' validation failed: InvokeWorkflowActivity cannot be used inside TransactionScopeActivity. "
Se você puder colocar o que deseja fazer, posso tentar montar uma solução para você.
quarta-feira, 26 de agosto de 2009 17:31
Na verdade eu tenho WF que chama outro WF, o primeiro insere uma compra e o segundo insere o parcelamento dessa compra. Quero controlar a transação, ou seja, se der erro no WF de parcela o de compra deve executar o rollback. Estou usando o Entity Framework para fazer os insert, update e delete.
quarta-feira, 26 de agosto de 2009 19:08
Pelo que você descreveu a sua execução tem que ser síncrona, certo? Veja se é possível expor o seu WF de parcelamento dentro de um serviço WCF. Normalmente utilizamos o InvokeWorkflowActivity em processamentos assíncronos. Abaixo segue um link sobre como expor um WF em um serviço WCF.