動作層TransactionScopeRequiredとTransactionAutoCompleteの挙動に定義され、この章は、前のセクションで説明されています。TransactionIsolationLevelとTransactionTimeoutを:サービス層では、二つの追加の行為を考慮する必要があります。
名前が示すようにTransactionIsolationLevelプロパティは、トランザクションの分離レベルに影響を与えます。分離は、ACIDトランザクションにおけるI、どのようにその周囲の分離に関するガイダンスを指します。分離レベルがたくさんあります。Serializableを、デフォルトでは、隔離の最高レベルを提供し、トランザクションが完了するまで、更新されたデータの他の部分を防ぐために。トランザクションは文「の受注からSELECT COUNT(*)」が含まれている場合、トランザクションが完了するまで、たとえば、ordersテーブル上の他のプロセスは、任意のデータを挿入しないか、削除することができます。READUNCOMMITTEDは、トランザクションがデータの読み取りや書き込みを完了する前にトランザクションで更新されている任意の他のプロセスを許可し、隔離の最低レベルを提供しています。実際の応用では、それはデフォルト値に分離レベルを維持することが好ましい、シリアライズ、トランザクションを回避するために対応する(*)選択のような順序からこのような状況は避けるべきで、非必須データをロックします。
トランザクション分離レベルは、サービスの動作によって定義されたクライアントとTransactinIsolationLevelによって定義されたTransactionScopeの間で一貫している必要があります。あなたが設定した値は持っていない場合は、デフォルトでは、IsolationLevel.Serializableが使用されます。5.22をリストREADUNCOMMITTEDされ、それぞれがクライアントとサーバーの設定を示しています。
時間が不足することがありトランザクションを制御することも可能です。これは、彼らが異なる目的を持って、クライアントまたはサーバ設定することができます。ユーザーが開始したトランザクションの実行時の動作の合計を制限するために使用することができ、クライアント、で。あまりにも多くのリソースを使用する必要はありませんより多くのトランザクションを設定するには、システム管理者が決定することができ、サーバ、で。
リスト5.22では、クライアントTransactionScopeOption.Timeoutは、それが30秒以上実行後、ユーザー定義のトランザクションが起動されなければならないことを意味し、30秒に設定されています。また、5.22を示しています、サーバーServiceBehaviorは、TransactionTimeoutは1分以上を実行するための任意のトランザクションがある場合、それは自動的に終了することを意味し、1分に設定されています。
5.22をリストし、トランザクション分離レベルのタイムアウトを設定します
04 |
TransactionOptions opt = new TransactionOptions(); |
05 |
opt.IsolationLevel = IsolationLevel.ReadUncommitted; |
06 |
opt.Timeout = new TimeSpan(0, 0, 30); |
07 |
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, opt)) |
09 |
localhost1.BankServiceClient proxy = new Client.localhost1.BankServiceClient(); |
10 |
proxy.Transfer( "savings" , "checking" , 100); |
4 |
[ServiceBehavior(TransactionIsolationLevel = IsolationLevel.ReadUncommitted, TransactionTimeout= "00:01:00" )] |
5 |
public class BankService : IBankService |
=====
より転載