我正在開發此應用程序的VB.net 2010
和SQL 2008
。
我希望通知客戶端有關數據庫的更新,以及使用定時器檢查數據庫中指定分鐘更改的應用程序,這實際上效率不高。我閱讀了大約query notification
,sqldependency
,service broker
,但後來我讀了一些說,如果我有100個客戶端,並且我使用查詢通知將通知推送到我的應用程序,他們可能效率不高。
有人會幫助我應該做什麼,以及我如何做到這一點(如果有示例可用,會非常有幫助)。提前致謝!我希望我的數據庫(SQL)通知或推送更新到客戶端應用程序
17
A
回答
16
查詢通知將推送到Service Broker服務,而不是直接發送到您的應用程序。瞭解它是如何工作的,請參見The Mysterious Notification。您的應用程序正在通過在數據庫上發佈WAITFOR(RECEIVE)
聲明來等待通知。這意味着100個客戶端中的每一個都佔用一個SQL Server工作線程(這是有限制的,請參閱max worker threads
選項)。我已經看到這在+1000客戶端的生產環境中工作(在碰到最大工作線程選項之後),但我會建議與之間。
我的建議是使用SqlDependency/QueryNotifications使一個服務監控變更。然後,該服務會將通知(例如使用WCF)推送到所有正在運行的應用程序。您將訂閱通用更改(the table Foo was changed
),而不是特定更改(the row x in table Foo was inserted
)。
作爲一般規則,SqlDependency/Query Notifications只能通知您數據已更改,但不會推送新的數據。應用程序必須在通知後再次運行查詢來刷新其本地數據集。
3
要小心使用SqlDependency類 - 它有內存泄漏problems。 Hovewer,你可以使用SqlDependency類的開源實現 - SqlDependencyEx。它使用數據庫觸發器和本機Service Broker通知來接收有關表更改的事件。這是一個用法示例:
int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME))
{
sqlDependency.TableChanged += (o, e) => changesReceived++;
sqlDependency.Start();
// Make table changes.
MakeTableInsertDeleteChanges(changesCount);
// Wait a little bit to receive all changes.
Thread.Sleep(1000);
}
Assert.AreEqual(changesCount, changesReceived);
使用SqlDependecyEx,您可以監視UPDATE,避免DELETE和INSERT。希望這可以幫助。
相關問題
- 1. 希望我的客戶端程序通過IPv4或IPv6連接
- 2. 應用程序更新推送通知
- 3. 如何推送/通知客戶端nodejs中的新數據?
- 4. 從Rails應用程序推送數據到客戶端
- 5. 如果我更新推送通知證書,將推送通知在我的舊應用程序上工作?
- 6. 解析遷移 - 客戶端到客戶端推送通知
- 7. 來自客戶端的推送通知
- 8. 客戶端(桌面應用程序)提取數據...但我希望服務器(Web應用程序)推送數據
- 9. 我想用推送通知我的應用程序的IPhone
- 10. 黑莓推送通知客戶端
- 11. 在客戶端停止推送通知
- 12. 我的應用程序沒有收到解析推送通知
- 13. 將數據推送到flex客戶端
- 14. 將數據推送到客戶端瀏覽器的Web應用程序
- 15. 應用程序更新後的推送通知
- 16. 更新推送通知的實時應用程序ID
- 17. 更新客戶端應用程序
- 18. 客戶端應用程序更新
- 19. 如何在數據庫更新時通知我的程序?
- 20. 如何將我的服務器通知推送到我的Android應用程序?
- 21. 推送通知 - 應用更新
- 22. 如何清除我的應用程序的iOS推送通知?
- 23. PHP跟蹤MySQL數據庫的最新更新推送到Rails應用程序?
- 24. Cordova。我使用推送通知或調度程序?
- 25. 推夏普發送推送通知到IOS應用程序
- 26. 在我的應用程序中關閉推送通知
- 27. Wp7推送通知啓動我的應用程序
- 28. 我的Android聊天應用程序推送通知
- 29. 我的產品ios應用程序沒有推送通知
- 30. 推送iPhone應用程序的通知