問題タブ [transactionscope]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
8 に答える
49515 参照

c# - TransactionScopeがEntityFrameworkで機能しないのはなぜですか?

以下のコードを参照してください。複数のエンティティコンテキストを初期化すると、2番目のコードセットでのみ次の例外が発生します。2番目のセットをコメントアウトすると機能します。

{"基になるプロバイダーがOpenで失敗しました。"}

内部:{"基になるトランザクションマネージャーとの通信に失敗しました。"}

内部:{"COMコンポーネントの呼び出しからエラーHRESULTE_FAILが返されました。"}

これはサンプルアプリであり、2つのコンテキストを続けて作成しても意味がないことに注意してください。ただし、本番コードには同じ中に複数のコンテキストを作成する理由がTransactionScopeあり、これを変更することはできません。

編集

これは、MS-DTCをセットアップしようとしている私の前の質問です。サーバーとクライアントの両方で有効になっているようです。正しく設定されているかわかりません。また、私がこれを行おうとしている理由の1つは、既存のコードがTransactionScopeADO.NETとLinq2Sqlを使用していることです...同じトランザクションも使用してほしいと思います。(それはおそらくクレイジーに聞こえますが、可能であればそれを機能させる必要があります)。

C#でTransactionScopeを使用するにはどうすればよいですか?

解決

WindowsファイアウォールがMS-DTCへの接続をブロックしていました。

0 投票する
1 に答える
1266 参照

windows-vista - MSMQ ビスタ x64

システムで Vista Ultimate x64 を実行しています。リモート サーバー上で実行されている MSMQ インスタンスにメッセージを送信するために、リモート サーバー上で正常に動作するアプリケーションがあります。アプリケーションをローカル システムに持ち込んでメッセージを送信しようとすると、送信されませんが、エラーも発生しません。ローカルの MSMQ インスタンスをセットアップしようとしたところ、そのインスタンスでも同じことが起こりました。エラーはありませんが、メッセージもありません。キューはトランザクション対応で、コード自体はトランザクション ベースです。

助言がありますか?ジャーナル オプションを実装しようとしましたが (これはログに似ていると仮定して)、何も記録しません。

イベントビューアを掘り下げたところ、表示されている唯一のエラー(実際には警告です)は次のとおりです。

システム [ComputerName] との安全な接続を確立しようとしているときに、MSDTC でエラー (HR=0x80000171) が発生しました。

ファイアウォールや MSMQ の実行など、標準的なものはすべてチェックされており、アプリを変更せずにリモート サーバーに配置すると、100% の確率で動作します。

0 投票する
3 に答える
1306 参照

c# - バックグラウンド スレッドの新しい System.Transactions.TransactionScope() がプログラムを停止させる

System.Transactions.TransactionScopeを使用して、トランザクション スコープの新しいインスタンスを作成するとプログラムが停止するだけのコードがあります。

例外やメッセージは表示されず、プログラムは単に停止し、Visual Studio はコード編集モードに戻ります。プロセスは完全になくなりました。イベント ビューアには、例外、メッセージ、またはイベントはありません。

問題なく TransactionScope を使用する別のテスト アプリがあるため、環境の問題ではないはずです。

例外の詳細を取得する方法がわかりません。例外がスローされたときにVSが自動的に中断することを期待して、Visual Studio内の[デバッグ]-> [例外]ダイアログですべての「スローされた」チェックボックスをオンにしましたが、そうではありません。

プログラムが終了する理由を教えてくれる人はいますか?

編集:新しいものを見つけました。TransactionScope は、 を介してバックグラウンド スレッドで実行されているメソッドで作成されていますThreadPool.QueueUserWorkItem。メイン アプリケーション スレッドでメソッドを直接呼び出すと、この問題はなくなります。だから今私の質問は、「スレッドプールスレッドで TransactionScope を使用することの問題は何ですか?」です。新しいスレッドを呼び出す前にトランザクション スコープを開始していないことに注意してください。それはすべて、スレッドプール スレッドで実行されている 1 つのメソッド内にあります。

0 投票する
3 に答える
10564 参照

c# - 既存の接続で TransactionScope を使用する方法はありますか?

TransactionScope の推奨される使用法と同じように機能するコードがいくつかありますが、アンビエント トランザクションではなくアンビエント接続があります。

既存の接続で TransactionScope オブジェクトを使用する方法はありますか、またはこの目的のために .Net フレームワークに代替手段がありますか?

0 投票する
5 に答える
6534 参照

c# - MySQLおよび読み取りロックでのTransactionScopeの使用

私は次の状況にあります:

一意の番号を格納するために使用するInnoDBテーブルを持つMySQLデータベースがある場合。トランザクションを開始し、値(1000471など)を読み取り、この値を別のテーブルに格納して、増分値(100472)を更新します。ここで、トランザクションの実行中に他の誰かが値を読み取ることさえ避けたいと思います。

プレーンなMySQLを使用する場合は、次のようにします。

Exceute( "LOCK tbl1 READ");
Execute( "SELECT ... from tbl1");
Execute( "INSERT into tbl2");
Execute( "UNLOCK TABLES");

ただし、SubSonicをDALとして使用しており、コードはmysqlから独立している必要があるため、TransactionScopeを使用する必要があります。

私のコード:

TransactionOptionsの助けによると

system.transactions.isolationlevel

到達したい効果はIsolationLevel.ReadCommittedで実装できますが、トランザクションの外部から行を読み取ることはできます(変更しようとすると、ロックが発生するため、トランザクションは機能します)

誰か提案がありますか?TransactionScopeでも読み取りロックは可能ですか

0 投票する
3 に答える
12673 参照

c# - コードがTransactionScope内にあるかどうかを知る方法は?

コードブロックがTransactionScope内にあるかどうかを知るための最良の方法は何ですか?
Transaction.Currentはそれを実行するための現実的な方法ですか、それとも微妙な点がありますか?
リフレクションを使用して(System.Transactions内の)内部ContextData.CurrentData.CurrentScopeにアクセスすることは可能ですか?はいの場合、どのように?

0 投票する
5 に答える
11253 参照

c# - SQL Server 2005 で System.Transactions を使用した場合の TransactionInDoubtException

この投稿の根底にある質問は、「プロモーションされていない LTM トランザクションが疑わしいのはなぜですか?」ということです。

System.Transactions.TransactionInDoubtException が発生しましたが、その理由を説明できません。残念ながら、この問題を再現することはできませんが、トレース ファイルによると発生します。私は SQL 2005 を使用しており、1 つのデータベースに接続し、1 つの SQLConnection を使用しているため、プロモーションが行われるとは考えていません。エラー メッセージはタイムアウトを示します。ただし、タイムアウト メッセージが表示されることもありますが、例外は、トランザクションが未確定ではなく中止されたことです。これは、処理がはるかに簡単です。

完全なスタック トレースは次のとおりです。

何か案は?なぜ私は doubpt に入ってしまったのでしょうか?

詳細については編集

私は実際にはまだこれに対する答えを持っていません。私が気付いたのは、トランザクションが実際には部分的にコミットされているということです。1 つのテーブルは挿入されますが、もう 1 つのテーブルは更新されません。コードは非常にトレースされており、何かを見逃す余地はあまりありません。

取引が促進されたかどうかを簡単に確認できる方法はありますか。スタック トレースから確認できますか? SIngle フェーズ コミット (strack トレースにあります) は、昇進していないことを示しているようですが、何かが足りないのかもしれません。昇進していない場合、どうして疑わしいのでしょうか。

パズルのもう 1 つの興味深いピースは、現在のトランザクションのクローンを作成することです。この問題の回避策としてこれを行います。 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=914869&SiteID=1

残念ながら、この問題が解決したかどうかはわかりません。クローンの作成が問題を引き起こしている可能性があります。ここに関連するコードがあります

ありがとう

0 投票する
3 に答える
4060 参照

c# - 次の SQL Server がトランザクション内で実行されると、デッドロックが挿入されるのはなぜですか?

現在、SQL Server テーブルにレコードを挿入し、次のように自動インクリメント ID を選択しています。

(これは Linq-to-SQL を使用して生成されました)。Serializable 分離​​レベルで TransactionScope オブジェクトを使用してトランザクション内でこのコードを実行すると、何らかの理由で SQL Server がデッドロック エラーをスローします。デッドロック グラフ イベントを分析したところ、関連する 2 つのプロセスがそれぞれ、変換操作を実行するために相互に待機していることがわかりました。次の情報を理解しているためです。

私の理解では、トランザクション スコープは、最初のプロセスが ID の挿入と選択の両方を完了するまで、2 番目のプロセスが挿入を実行できないようにするというものでした。しかし、そうではないようです。スレッドセーフな方法で私が必要とするものを達成するための最良のアプローチに誰かが光を当てることができますか?

--更新--

注意してください。それぞれがデータベースと通信するための新しい DataContext を作成するため、2 つのプロセス間で接続が共有されていないことは 99% 確信しています。

--再度更新--

Remus Rusanu は、いくつかの省略された情報が問題に関連していることを指摘しました。デッドロック グラフ レポートに基づいてシナリオを単純化しようとしましたが、ここで説明を拡張しました。挿入を行う前に、問題のテーブルに対して既存のクエリを実行して、タグが既に存在するかどうかを確認します。もしそうなら、私は取引を終了します。Some_Intそうでない場合は、挿入を続行する必要があります。次に、更新は純粋に最後に変更された値に対するものですが、ここには示されていませんが、主キーを持つテーブルで更新を実行します。Tag テーブルに、auto inc ID と Some_Int の両方で構成されるクラスター化インデックスがあることも重要な場合があります。この最後の情報は関連性があるとは思いませんでした。主キー/クラスター化インデックスとして auto inc フィールドのみを持つようにテーブルを変更しようとしても役に立たなかったからです。

ありがとう。

0 投票する
1 に答える
1312 参照

.net - 型付きデータセットでの TransactionScope の使用

型付きデータセット テーブルアダプターを使用して SqlCe データベースにクエリを実行する WinForm アプリケーションがあります。メイン フォーム アセンブリと、すべての db 操作を処理するデータベース アセンブリがあります。トランザクションで tableadapter を使用して更新する際に問題が発生しています。その理由を教えていただければ幸いです。

Update() メソッドで次のエラーが発生します。

これが私のコードです:

0 投票する
4 に答える
28191 参照

asp.net - 分散トランザクションが完了しました。このセッションを新しいトランザクションまたは NULL トランザクションに参加させる

他の誰かがこの特定のエラーを抱えていて、それを解決する方法を知っているかどうかだけ知りたいですか?

シナリオは次のとおりです...

SQL Server 2008 クラスター バックエンドに接続する Windows Server 2008 IIS ファームで実行されている Enterprise Library を使用する ASP.NET Web アプリケーションがあります。MSDTC がオンになっています。DB 接続はプールされます。

私の疑惑は、どこかで MSDTC トランザクションが失敗し、接続がプールに返され、別のページの次のクエリが不正な接続を取得して、この特定のエラーが発生したことです。おもしろいのは、分散トランザクションをまったく必要としないクエリでこのエラーが発生したことです (2 つのデータベースへのコミットなど)。エラーが発生したとき、選択クエリ (トランザクションなし) のみを実行していました。

SQL プロファイリングを実行し、クエリは SQL Server で実行されましたが、返されませんでした (接続で MSDTC トランザクションが既に中止されたため)。

これに伴うその他の関連エラーは次のとおりです。

  • 有効なトランザクション記述子が必要なため、新しいリクエストを開始することはできません。
  • 内部 .Net Framework データ プロバイダー エラー 60。