2012-07-02 18 views
6

軽量なRESTベースのアプリケーションの実装を支援するためにASP.NET WEB APIが構築されていることを理解します。しかし、私はRESTサービスがトランザクションである/トランザクションの一部である必要があります。私は見てみましたが、クライアントが開始したトランザクションの一部としてWEB APIを登録する方法がないようです。これを行う方法はありますか?取引におけるサービスコールを参加させるASP.net WEB APIとのトランザクション

よろしく ジャガディッシュ

+0

トランザクションは何と考えますか?一般的な作業単位ですか? 'DbTransaction'または' SqlTransaction'ですか? – jrummell

+0

DTCでトランザクションを管理することを検討していましたが、WEB APIがそれをサポートしていないように見えます – user1496864

答えて

4

私は、サービス境界を越えて伝播できる分散トランザクション(MSDTC経由)を指していると思います。

ただし、プレーンなHTTP要求に対してトランザクション状態を伝播して管理する方法がないため、WCF RESTfulサービスでの分散トランザクションは不可能です。

HTTP(wsHttpBinding)またはTCP/IP(net.tcp)を使用してプレーンなWCFサービスを調べたり、WCF Data Servicesを調べたりすることもできます。

4

は、一般的にSOAPの動作ではありませんREST行動として考えられています。少なくともWS-AtomicTransactionと呼ばれるSOAPを使ってそれを行う標準化された方法があります。指向SOAPなので、これは、明示的にASP.NetのWeb APIでサポートされていないが、RESTに似た同様の行動を自分で実装することが可能であろうWCF

http://msdn.microsoft.com/en-us/library/ms730266

によってサポートされてい

確実に行うのは比較的複雑です。

+0

+1 ...より速く...そして正しい:) –

+0

"しかし、それは比較的複雑です。私たちがそれを実装したいと思ったら、そのアプローチがどんなものかと思っていますか? – user1496864

11

ワイヤの両端を制御する場合は、必要なものを達成することができます。

TransactionInteropクラスは、MS DTCを利用してプロセス境界間のトランザクションを処理するためのサポートを提供するために存在します。 - これは、現在のプロセスの外部トランザクションを伝播するために使用することができ、トークンを取得します

クライアントで最初の方法を使用してトランザクションを生成できます。これをカスタムヘッダー値またはクッキーとして設定して、サービスに渡すことができます。サービスを開始したら、2番目の方法を使用してトランザクションをローカルに作成することができます。

これに対する主な注意点は、クライアントとサーバーでMS DTCを有効にして構成する必要があることです。これは、サービスがWindows Active Directoryドメイン内で呼び出されている場合にのみ実現できます。