私はシンプルなWCFクライアント/サーバーの状況で動作する単純なトランザクションセットを得るためにいくつかの方法を試してきました。私のWCFサーバーには、データベースアクセスのためのEntity Frameworkクラスのクラスレベル宣言と、SaveChangesへのデータとメソッドを変更するいくつかのメソッドがあります。 Oracle Data Access(ODP.NET)を使用しています。Entity FrameworkおよびWCFをトランザクションと連携させるにはどうすればよいですか?さて、秘密は何ですか?
たとえば、クライアントからの変更を呼び出してから、WCFサービスの変更を保存する別の呼び出しを呼び出したいとします。それは動作しません。基本的にはすべて正常に実行されますが、変更を保存するための2回目の呼び出しが行われると、WCFサービスはもはや元のコンテキストを持たないため、変更は保存されません(したがって、変更を加えた前の呼び出しは自動的にロールバックされます) 。
私はクライアントで両方の操作の周りにTransactionスコープを利用していますし、完了後にComplete()を実行しています。私のWCFサービスは、[TransactionFlow(TransactionFlowOption.Mandatory)]
を使用するOperationContractを持ち、これらのメソッドの実装は[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
を使用します。最後に、私のWeb設定は、transactionFlow
プロパティがTrueに設定されているwsHttpBindingで設定されています。
私は運がありません。私が何を試みても、フォローアップセーブのためにサービスを打ちようとすると、EFコンテキストは既に更新されています。
すべてのバインディングがトランザクションをサポートするわけではありません。 http://www.wrox.com/WileyCDA/Section/Transactions-in-WCF-and-NET.id-305253.html – faester
通話間のセッションをどのように処理していますか? WCFはデフォルトではステートレスなので、あなたが何かを失うかもしれない状態で何かをするようWCFに指示しない限り、そうではありません。 –
edmxまたはpocoによって生成されたエンティティが生成される – Praneeth