問題タブ [query-notifications]
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.
c# - SqlDependency と SQL Server データベースの定期的なポーリング
私は現在、新しいレコードの挿入についてテーブルを監視し、各行の電子メール通知を送信する必要がある電子メール アプリケーションに取り組んでいます。現時点では、変更 (挿入) の割合は低いですが、最終的にはそれ以上になるでしょう。
最初は、SQL Server ジョブを使用して 3 ~ 5 分ごとにクエリを実行することを考えていましたが、調べてみましたSqlDependency
が、SQL 依存関係/クエリ通知が私の要件に適したオプションになるかどうかはわかりません。
1 分ごとに挿入がある場合は、3 ~ 5 分ごとではなく、1 分ごとにテーブルをポーリングします。通知を即座に取得して電子メール通知を送信できることを理解してSqlDependency
いますが、頻繁にポーリングすることでパフォーマンスに影響を与えたくありません。最終的には 1 分以内に 10K の挿入が発生し、他のジョブと this の間の輻輳についてはわかりませんSqlDependency
。
特定の事前定義された間隔で SQL Server ジョブのポーリングを行うことを考えています。何か考えや提案はありますか?誰かが以前に同じ状況に直面したことがあるはずです。フィードバックをお待ちしております。ありがとう
もう 1 つの質問 ピーク時には、クエリ通知後 1 分ごとにテーブルをポーリングしても問題ありませんが、処理中に挿入されたレコードはどうなりますか (選択/電子メールの送信/更新)。次のレコードが正しく挿入されるまで通知されないと思いますか?
c# - SqlDependency/Query 通知 - SQL Server の再起動
/クエリ通知を持つサーバーでアプリケーションを実行していますSqlDependency
-別のサーバー上のテーブルの変更を監視しています。
SQL Server を再起動/再起動するまで問題なく動作します。一部のメンテナンスやパッチのために SQL Server を再起動すると、他のアプリケーションが次のエラーをスローして停止します。SQL Server が起動して実行されると、変更を監視しないため、停止したと断言できます。
クエリ通知を再サブスクライブするには、アプリケーションを再起動する必要があります。アプリケーションを停止するコード内で例外をスローしていません。例外をキャッチしてメールを送信しています。
System.Data.SqlClient.SqlException (0x80131904): サーバーに要求を送信するときに、トランスポート レベルのエラーが発生しました。(プロバイダー: TCP プロバイダー、エラー: 0 - 既存の接続がリモート ホストによって強制的に閉じられました。) --->
System.Data.SqlClient.SqlException (0x80131904): SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。
私はSqlDependency
/ 通知のクエリを初めて使用するので、これが予想される動作なのか、間違っているのかわかりません。再サブスクライブするためにジョブを再起動する必要がないことは、(他の投稿 ( SqlDependency Reliablity? ) から) 私の理解です。
あなたの時間と答えに感謝します
c# - SqlDependency.OnChange が datetime 列のフィルターで起動しない
SqlDependency でこの SQL ステートメントを使用すると問題が発生します。SqlDependency.OnChange イベントをアクティブにするのではなく、SQL Server クエリ ウィンドウで期待どおりの結果を返します。
https://technet.microsoft.com/en-us/library/ms181122(v=sql.105).aspxのサポートされている SELECT ステートメントのセクションを読みましたが、違反しているルールは見つかりませんでした。
何か案は?
アップデート:
以下の私の完全なコード:
更新(jmeloseguiの回答に応じて):
...
c# - Service Broker/Sqldependency エラー
テーブルの変更を監視するためにサービス ブローカー/Sqldependency を使用しています。実際のコンソール アプリケーションは、SQL サーバーとは異なるサーバー上で Windows サービスとして実行されます。私たちは毎日サービスを停止して開始します。毎日発生する2つのエラー以外は正常に機能しています
最初のエラーは、windows サービスを停止して開始したときに対応します。
Service Broker は、データベース 'XXXX' のマスター キーにアクセスする必要があります。エラーコード:32。マスター キーが存在する必要があり、サービス マスター キーの暗号化が必要です。
2 番目のエラーは、sqldependency の停止と開始後にテーブルで最初の変更が発生した時間枠に対応します。
会話ハンドル「{4443C789-1047-E511-80DA-005056A32BA6}」のクエリ通知ダイアログ。次のエラーのため閉じられました: '-8490
リモート サービス 'SqlQueryNotificationService-555c9c9d-d01a-423c-8710-7e9e9a63fbca' が存在しないため、見つかりません.'.5
以下は、私が使用しているコードスニペットです
オンサービス開始:
オンサービスストップ
告知イベントで
上記のエラーの原因となっている他に何が欠けているのかわかりません。誰かがこれらのエラーの原因と解決策を理解するのを手伝ってくれませんか. この 2 つのエラー以外は、サービスは正常に実行されているようです。
お時間を割いてご返信ください
sql-server - ストアド プロシージャを使用した SQL Server クエリ通知
現在のプロジェクトにクエリ通知を実装しようとしています。を使用してクエリ通知を実装していますSqlDependency
。Ado.net コマンドでクエリのインライン SQL を直接実行すると、コードを動作させることができますが、まったく同じクエリをストアド プロシージャに入れると、クエリ通知が機能しないようです。イベント引数SqlNotificationEventArgs
のパラメータに Query(8) の値を返します。e.Info
また、約発射し続けます。30秒以上ごと。
ストアド プロシージャは次のとおりです。
これがインライン SQL とストアド プロシージャの使用で機能する理由はありますか?