TOP
PROFILE
MUSIC TUNE
BBS
LINK

2006年12月07日

TSとSBの相性かバグか・・

最近チーム内のメンバーがある問題について調査していた。症状はアプリ側がTransactionScopeを使って分散トランザクションを仕掛けていたところ、ServiceBrokerのReceive処理を行うストアドプロシージャを使用したところで「トランザクションが中止しました」の例外が発生するのである。
いろいろと調査した結果、どうやらReceive句にWAIT FORを利用した場合、TSを使った分散トランザクションでNGになるらしいことが判明。
WAIT FORはRECEIVEを行った際、受信キューの中にメッセージが存在しない場合に、任意の時間だけ待機するという処理を行うのだが、このWAIT FORが内部でトランザクションを掛けているらしく、ひょっとしたらそれが原因でエスカレーションができないのではないかというのが見解。

ただOSさんも含めて症状について話をしたところ、WAIT FORを設定すること自体はお作法のようなものなので、ここで例外が飛ぶというのはひょっとしたらTSとSBを組み合わせた場合のバグかもしれないという話もでたが、当然公式見解ではないので結局原因はわからない・・まぁWAIT FORを削除すれば問題ないので大勢に影響はないが、そもそもTransactionScopeはDBミラーリングとの組み合わせで問題が発生することは既にKBにも上がっており、新しい技術同士を組み合わせて使う場合は、やはりしっかりとした事前の検証が必要だと痛感した次第である。

Posted by GAMMARAY at 2006年12月07日 00:09 | TrackBack
Comments
Post a comment









Remember personal info?