現時点では、APIコントローラーと通信するライブラリを統合テストするためにこれと同様のことを行っていますが、これまでのところうまくいっていますが、問題が発生しました。他のすべての統合テストでは、MSDTCトランザクション内で分離レベルReadCommittedでテストを実行し、各テストがデータベースなどとの独自の小さなプライベートセッションを取得し、各テストの最後にトランザクションがロールバックされるようにします。..しかし、トランザクションはスレッドごとであり、すべてのHttpClient / HttpServerメソッドは非同期であるため、これらのテストでは機能しません。そのため、作業はそのテストのメインスレッドとは異なるスレッドで実行されます。サブスクライブするアンビエントトランザクションであり、すぐに実行されてコミットされます。
1つのスレッドでTransactionScopeを開き、クロージャーを介して新しいタスクに渡される依存トランザクションを作成する方法についていくつかの投稿に出くわしましたが、それに接続されているHttpClientにそれを適用する方法がわかりません。インメモリHttpServer。私はそれを正しい方法で考えていないのではないかと思いますが、それが私が続けなければならないことのすべてです。
何が理にかなっている/仕事/など?HttpServerとそれに接続するHttpClientの作成を完全に制御できますが、それらをどう処理するかについて迷っています。
アップデート:
いくつかの進歩がありました-Transaction.Currentがそこに到達したときに入力され、一部の呼び出しではそうではない場合、ワーカースレッドに依存するトランザクションを作成できるメッセージハンドラーを作成しました。シャドウを追いかけているのではないかと思います。たとえば、ContinueWithがたくさんあり、先行タスクがすでに完了している場合は、呼び出し元のスレッド(当然トランザクションがあります)で実行されると思います。
すべてを同期して実行し、テストのスレッドを最後まで実行することは可能でしょうか?私はContinueWithを同期的に試してみましたが、あまり成功しませんでした。