私は、ユーザーがボタンをクリックしてSQL Serverのストアドプロシージャを呼び出して計算を実行する.NETページを持っています。通常、計算には約2分かかり、完了するとテーブルのフィールドが更新されます。今私は、ユーザーが誤ってブラウザを閉じると、ストアドプロシージャはまだ実行され、テーブルを更新するという問題があります。私は、ページが実行を停止する必要があると考えていたが、ブラウザが閉じていても実行し続けるのではなく、テーブルのフィールドの更新をやめてしまったのですか?任意のアイデアプロセスを停止する方法?ブラウザが閉じても、ストアドプロシージャとプログラムは実行されていますか?
答えて
ページリクエストによってデータベースが呼び出されると、ページは終了するのを待ちますが、データベースにはページのノレッジがありません。したがって、何らかの理由でページが待機しなくなった場合、データベースは終了するまでうまく動作し続けます。実際には、ページリクエストには、ブラウザがまだ開いているかどうかについての知識もありません。したがって、ユーザがブラウザを閉じると、ページリクエスト自体は終了するまで実行されます。誰もその結果を聞くことができないだけです。
サーバーには、ブラウザがまだ開いているかどうかはわかりません。ブラウザはプロセスを起動し、ページがダウンロードされるまでにサーバーとのやりとりが完了します。
しかし、ボタンをクリックしてブラウザを閉じた後、私は数秒でブラウザを閉じました。同時に、私はテーブルのフィールドをチェックし、それはまだ更新されていませんが、2分後に、私はフィールドをもう一度チェックします、今回は更新されました。 –
ストアドプロシージャがトランザクション処理の場合、トランザクションが完了するまでデータベースの変更は表示されません。進行状況を確認する必要がある場合は、(nolock)を使用して試すことができます。 –
ブラウザがまだ開いていてアクティブであるかどうかをサーバーが判断できるようにするには、タイマーajax呼び出しを使用できます。
このような場合にストアドプロシージャを停止するには、ストアドプロシージャを大幅に変更する必要があります。実際の唯一の方法は、ストアドプロシージャを実行し続ける必要があることを示すためにパラメータをデータベースに格納し、ストアドプロシージャ全体でそのパラメータをチェックすることです。ブラウザーが閉じている場合は、このパラメーターを更新し、ストアード・プロシージャーをこの値に基づいてロールバック/終了するように変更することができます。
しかし、これはすべて非常にわずかな利益のためにかなり複雑です...ストアドプロシージャが実行し続けるのは問題ですか?
実際には関係ありません。私はちょうど何が起こっているのか把握したい! –
これをキャンセルするフォームをサポートする必要がある場合は、asp.netページと計算にいくつかの変更を加える必要があります。あなたの計算はフラグを検索する必要があります(結果が格納されたテーブルと同じテーブル内にあるかもしれません)。
次に、コード内で、プロシージャの実行を非同期で起動する必要があります。さて、クリーンな作業を行うためには、ページ全体を非同期で処理し、定期的に目を覚ます必要があり、Request.IsClientConnectedをチェックし、接続されていない場合は、フラグを設定して計算をキャンセルします。
これはかなりの仕事であり、間違いやすいものです。また、これを実装するための戦略は、アプリケーションが10人のユーザーまたは1,000人のユーザーをサポートする必要があるかどうかによって大きく異なります(アプリケーションのスケーラビリティを制限したり、IsClientConnectedどのような計算から打ち切るのですか?)
- 1. ブラウザが閉じていてもサービスワーカーはバックグラウンドで実行されますか?
- 2. ブラウザを閉じてもPHPはバックグラウンドで実行されますか?
- 3. ブラウザが閉じていても、バックグラウンドで関数を実行する
- 4. Python Flask。ブラウザのページが閉じていてもコードを実行し続ける
- 5. Powershellウィンドウを閉じても私のプログラムは閉じます
- 6. リンクされたサーバーが閉じている間、ストアドプロシージャを実行するとエラーが発生します
- 7. .NETセッション - ユーザーがブラウザを閉じてもセッションが維持されます
- 8. ストリームが閉じていても削除を実行中のファイル
- 9. フォームが閉じているときRevit Addinが実行されます
- 10. アプリが閉じていてもGPS位置のトラッキング(バックグラウンドでは実行されていません)/ ScreenLocked
- 11. JasperViewerが表示されて閉じると、メインフレーム/親も閉じます
- 12. Matplotlibプロットは、ウィンドウが閉じても更新されますか?
- 13. クロムを閉じても実行されるChrome拡張子
- 14. バッチを閉じるウィンドウを閉じる方法はなぜアプリはまだ実行されていますか?
- 15. (完了までプロセスが実行され、ブラウザが閉じられた後)
- 16. C#プログラムは、フォームを閉じた後もプロセス内で実行され続ける
- 17. パテ端末が閉じた後でもJavaプログラムを実行
- 18. Google Chromeを閉じてもこれらのタスクがすべて実行されるのはなぜですか?
- 19. コードが実行されていた閉じたIPythonノートブック
- 20. すぐに成功メッセージが表示されます - ブラウザがすぐに閉じてもPHPスクリプトが実行されますか?
- 21. Python:図ウィンドウを閉じてプログラムを実行させよう
- 22. ブラウザが閉じられる前にセッションCookieが破棄されています
- 23. ブラウザを閉じるとクッキーは削除されますか?
- 24. ブラウザの親ウィンドウを閉じても、子のポップアップウィンドウを閉じることはできますか?
- 25. .BATウィンドウが閉じて、私は、ネットワーキングといくつかの実験を行うJavaプログラムを持っている
- 26. SQLException:すべてのリソースを閉じてもデータベースがロックされています
- 27. Cから別のプログラムを開いて実行してから、このプログラムを閉じます。
- 28. ユーザーがブラウザを閉じた後もNode.jsを実行し続けることができますか?
- 29. セレンはjannitとしてantで実行中ですが、IDEではなくブラウザが閉じます
- 30. バックグラウンドで実行されているストアドプロシージャ?
しかし、フィールドを更新するためのコーディングは、格納されたprocではなく、コードの背後にあります。だから、私はなぜページがまだ完了したらフィールドを更新するのだろうか? –
@WeeShian:これはページ要求がブラウザから切断されているためです。ページ要求はブラウザではなくWebサーバーで実行されることを覚えておいてください。ページ要求は、ブラウザがまだ開いているかどうかを知らない。 –
icic..本当にありがとうございます! –