ワークフロー基盤 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 が有効になっています