シナリオ:TransactedReceiveScope - トランザクションコミットはいつですか?
トランザクションフローを使用しないクライアントを持つwcfワークフローがあります。 ワークフローには、一連の順次TransactedReceiveScopes(コンテンツベースの相関を使用)が含まれています。 TransactedReceiveScopesにはカスタムdb操作が含まれています。
観察:
我々は最初の呼び出しに対してSQLプロファイラを実行すると、我々はすべてのカスタムDBの呼び出しを参照し、プロファイルトレースでSaveInstanceコール。
SendReplyがTransactedReceiveScopeの最後にある場合でも、トランザクションがコミットされる前にsendreplyが10秒間実行されることがあることに気付きました。
TimeToPersistとTimeToUnloadをゼロに変更しようとしましたが、それは効果がありませんでした。 (トレースには、とにかに起こったSaveInstanceが表示されますが、コミットは遅れているようです)。
質問:
私たちの観察は正しいですか?
トランザクションはいつ実行されますか?これはガベージコレクションのようなものですか?つまり、ビジー状態ではないのに後でコミットしますか?
コミット遅延を制御する方法はありませんか、クライアントからトランザクションフローを使用するためにこれを行う唯一の方法です(ancは、クライアントがコミットしたときにコミットする必要があります。
ありがとうMaurice。私はまだ、あなたがすべてのSQL呼び出しをsaveinstanceを含むプロファイラで見ることが奇妙であると感じると、それはクライアントに戻りますが、コミットする前にまだ遅れています。私はスケジューラを読む必要がある、私はそれについてはあまり言及していない。唯一の解決策は、クライアントがトランザクションに追加する作業がなくても、クライアントからのTransactionFlowを使用してトランザクションのコミットを制御することです。 – jimasp
これを読んでいるもう1つのポイントは、クライアントがトランザクションをワークフローに流していない場合、ほとんどの場合、間にトランザクションスコープを持つ標準のreceive/sendreplyが必要なことです。 – jimasp