私は次のようなコードを持っている:
using (TransactionScope scope = TransactionScopeFactory.CreateTransactionScope())
{
*// some methodes calls for which scope is needed*
...
...
*//than WCF method code for which I don"t want transaction to be involved, but if it throws an exception I don"t wish scope to be completed*
WcfServiceInstance.SomeMethod();
scope.Complete();
}
私の質問は、私はWCFサービスメソッドを呼び出すことができますTransactionスコープ内で問題なく動作していますか? (私はサービスメソッドがどのように実装されているかわからない)また、私はTransactionがwcfサービスメソッド呼び出しに関与しないことを確信したいと思います。
回答:
回答№1の場合は3クライアントアプリケーションからサービスにトランザクションを伝播するには、sererとクライアントのトランザクションフローに明示的にオプトインする必要があります。クライアントがトランザクション対応バインディングを使用している場合 (NetTcp, NetNamedPipe, WSHttp, WSDualHttp, & WSFederation)
それからあなたはブール値のプロパティを見るべきです TransactionFlow
。これをfalseに設定すると、トランザクションがあなたのクライアントからサーバに流れないようになります。
操作レベルで追加の制御を得ることができます。 TransactionFlow
属性ですが、これはサーバー側の属性なので、サービスコードにアクセスできない場合は、これはオプションではない可能性があります。
あれば教えてください TransactionFlow
属性が問題を解決できません。 クライアントでこれをfalseに設定すると、すべてのトランザクションがクライアントからその特定のエンドポイントバインディングのサービスに渡されるのを防ぐことができます。
回答№2のための7
WCFサービスメソッドはトランザクション型でもそうでなくても構いません。実装方法によって異なります。サービス呼び出しがトランザクションに参加していないことを確認したい場合は、サービス呼び出しを「抑制された」トランザクションスコープで囲みます。これは周囲のトランザクションを抑制します。
using( new TransactionScope(TransactionScopeOption.Suppress)
{
WcfServiceInstance.SomeMethod()
}