2

WCF では、同期呼び出しを使用します。

応答では、接続が切断されました。送信者はこれで問題ありません。例外が発生し、アクションをロールバックできます。しかし、受信機とは何ですか。彼は行動を起こしました - ウェブコールに関して - 成功しましたが、彼は送信者、受信者が[例外のために]うまくいかなかったことを知りません。受信機が応答でエラーが発生したことを検出する可能性はありますか?

双方がサービス コールの状態を正しく認識できるようにするパターンが必要です。(背景には、2 つのシステムにステート マシンがあり、そのうちの 1 つの変更を別のシステムでも実現する必要がある、またはいずれかでエラーが発生した場合 - 分散トランザクションのように聞こえる)

4

1 に答える 1

2

すべてのサービス操作を分散トランザクションに登録することを検討する必要があります。

これにより、操作が失敗した場合に、サービス境界を越えてトランザクションがロールバックされることが保証されます。したがって、クライアントでトランザクションをロールバックすると、サーバーでも自動的にロールバックされます (逆も同様です)。

スタートアップの記事:

  1. WCF トランザクションの伝播。
  2. コードプロジェクトのサンプル。

把握するのは大変なことのように思えますが、努力する価値は十分にあります。エラー処理ロジックが大幅に簡素化されます。

注: WCF トランザクションは実際にはネイティブの分散トランザクション (MSDTC によって管理される) であるため、これによりさらにメリットが得られます。トランザクションは (オプションで) SQL Server (使用している場合) に伝達され、すべてのデータベース操作はサービス操作と同じトランザクションになります。

于 2012-06-26T07:07:04.830 に答える