2

全体像は次のとおりです。

新しい SOA ベースの情報システム内で、いくつかの WCF サービスを構築する必要があります。これらのサービスの主な目的は、ビジネス トランザクションを処理することです。

例を見てみましょう: ユーザーがサイト (またはモバイル アプリ) で注文すると、クライアント アプリケーションは、すべてのビジネス トランザクションを調整する WCF サービス (注文プロセス マネージャーと呼びましょう) を呼び出します。OPM は、サブプロセスが失敗した場合にすべてのトランザクションがロールバックされるように、何らかの方法でトランザクションを開始します。

ポイントは、OPM がユーザー アカウント サービス、ストック マネージャー サービスなどの他のサービスを呼び出さなければならない場合があるということです。これらのサービスは、独自のトランザクションをコミットおよびロールバックするストアド プロシージャを呼び出す既存のサービス (変更できない) である可能性があります。もう 1 つの可能性は、これらの他のサービスが Entity Framework の上に構築され、トランザクションを処理する独自の方法を持つ可能性があることです (Unit of Work、トランザクション スコープ、リポジトリなどを使用して...)。

私の考えでは、OPM 内でトランザクション スコープを使用するほど単純ではなく、すべてをロールバックすることを決定するたびにすべての魔法が実行されると思います。

誰かがすでにそのような問題に直面しているなら、私はすべて耳を傾けています!

環境仕様は次のとおりです。

  • .Net 4.0 / C#
  • WCF
  • SQL Server 2008R2

皆さんに感謝します。

フレディ。

4

1 に答える 1

1

これらのサービスは既存のサービスである可能性があります (変更できません)。

したがって、これは、あなたにとって魔法のような解決策がないことを知るために知っておく必要がある唯一の要件です. WCF は、OPM がトランザクションを使用TransactionScopeして他のサービスに伝播できる分散トランザクションを提供しますが、これには両側で構成といくつかのコーディングが必要です。さらに、呼び出されたサービスは、トランザクション委任をサポートする API によって記述される必要があります。分散トランザクションは非常に複雑で、システムのパフォーマンスに大きな影響を与える可能性があります。

それらを変更する可能性のない既存のサービスを使用する必要がある場合、唯一のオプションは補償です。補償は手動のロールバックに似ています。これは、ロックを保持している標準トランザクションを使用できない長時間実行プロセスで非常によく使用されます。補償は、ロールバックの代わりに呼び出す独自のカスタム コードであり、現在のビジネス トランザクションによって行われたすべての変更が元に戻されます。

于 2012-09-10T19:52:58.920 に答える