4

顧客からの要件は、データベース内の特定のテーブルになんらかの種類の変更があるたびに、更新されたデータを画面に表示できるようにすることでした。

DB に Job テーブルがあり、その内容はブラウザーの GridView に表示されます。要件は、Jobs テーブルで更新、削除、または挿入が発生するたびにグリッド データを更新することです。

これを実装するために、SQL 依存関係とロング ポーリング手法を使用しました。SQL 依存関係は、DB の変更を asp.net に通知し、ロング ポーリングは、グリッドビューを非同期的に更新し続けます。

これを IIS 7.0 にデプロイしたところ、一貫性のない動作に気付きました。つまり、グリッドビューはほとんどの場合、たとえば 90 ~ 95% 更新されますが、DB テーブルのデータが変更されても更新が行われない場合があります。

誰もこの問題に直面しましたか? このために IIS で必要な特定の構成はありますか? IIS がコメット プログラミングに対応していないことをいくつかの場所で読みました。上記のシナリオは、ユーザーが 1 人しかいないテスト環境で発生します。どんな助けでも大歓迎です。前もって感謝します。

編集:この問題は ASP.Net 開発サーバーでも発生しているようで、IIS に分離されていません。メッセージをログに記録した後、OnChange イベントが一貫してトリガーされないため、SQLDependency が壊れていることがわかりました。

編集 2:クエリを実行するselect * from sys.dm_qn_subscriptionsと、同じ通知サブスクリプション、つまり重複したサブスクリプションに対して複数の行が取得されます。id 列のみが異なります。これが理由でしょうか?はいの場合、サブスクリプション行が重複するのはなぜですか? ASP.NET からサブスクリプションを削除するにはどうすればよいですか?

4

2 に答える 2

1

プロジェクトにCOMET-or-Reverse-AJAXを実装する必要があると思います。
これには良い例があります

http://www.codeproject.com/Articles/34562/COMET-or-Reverse-AJAX-based-Grid-Control-for-ASP-N

于 2012-08-28T14:10:43.873 に答える
0

最初に行う必要があるのは、dbo.AspNet_SqlCacheTablesForChangeNotification テーブルを確認することです。テーブルごとにキャッシュ無効化カウンターがあります。数値に問題がない場合 (100% 増加しても損失がない場合)、UI レイヤーの確認を検討してください。

于 2012-08-28T14:31:44.967 に答える