0

ワークフロー基盤 4.5 で受信トランザクション スコープをテストしていますが、何か問題があると思います。

明示的なロールバックによってトランザクションをいつロールバックするかを確認します。

using (TransactionScope s = new TransactionScope())
{
    using (ServiceReference1.ServiceClient cli = new ServiceReference1.ServiceClient())
    {
        Transaction t = Transaction.Current;                    
        cli.GetData(new ServiceReference1.GetData() { data = 10, ID = id });
        t.Rollback();                                        
    }
}

または、transactionScope で例外をスローします。

using (TransactionScope s = new TransactionScope())
{
    using (ServiceReference1.ServiceClient cli = new ServiceReference1.ServiceClient())
    {
        cli.GetData(new ServiceReference1.GetData() { data = 10, ID = id });
        throw new Exception("Error!");
    }
}

ワークフローもロールバックされることを期待しています! つまり、受信「GetData」がまだ有効であることを期待しています! しかし、それは起こりません。ワークフローが実行され、GetData は有効ではなくなりました。

ワークフローが「完了」状態にならないことを保証するために、「GetData」の後に他の「受信」があります...

ワークフロー内にトランザクション ID を返すアクティビティがあるため (もちろん、アプリの ID と一致します)、トランザクションがワークフローに流れ込んでいると確信しています。

誰が何が起こっているのか分かりますか? 私は何が欠けていますか?

Futher notes:
すべてが私のマシンで実行されています (Sql Server 2012 のバッキング ストアを含む) DTC が有効になっています

4

1 に答える 1

0

ワークフロー自体はトランザクション リソースではありません。したがって、実行したデータベースの更新はロールバックされる可能性がありますが、ワークフロー自体の状態はリセットされません。

于 2013-03-05T04:45:36.200 に答える