我正在构建一个Web应用程序,用户提交的作业由后台服务处理,Web应用程序和后台服务之间的通信在数据库上完成。因此,当搜索开始时,Web应用程序会将一条记录插入到数据库中,并等待记录的状态字段发生变化。据我所知,如果我在请求线程中实现这个功能,我会不必要地阻塞其中一个线程池线程,但无法让我的头部异步执行此操作。这种情况下的最佳做法是什么?c#asp.net等待数据库中的状态更改
0
A
回答
0
如果使用SQL Server作为您的数据库,那么你可以使用一个叫做的SqlDependency一个ADO.NET功能,
什么这个剂量时正确设置,当曾经有在表中的变化(你将配置)会引发一个C#事件。 这里是一篇文章,它扩大了它
注意:你将不得不设置你的SQL服务器来启用它。
http://www.codeproject.com/Articles/12335/Using-SqlDependency-for-data-change-events
而这一次expains后如何在表中的数据已经改变
http://msdn.microsoft.com/en-us/library/e3w8402y%28v=vs.80%29.aspx
2
的SqlDependency是非常有用的,但在服务器端提供它只有一半的解决方案刷新页面。我通过使用SignalR向客户端发出查询结束的信号,克服了另一半的问题。最后,这是一个非常高效和优雅的解决方案。谢谢(你的)信息!
public class KYHub : Hub
{
void OnChange(object sender, SqlNotificationEventArgs e)
{
SqlDependency dependency = sender as SqlDependency;
dependency.OnChange -= OnChange;
if (e.Info != SqlNotificationInfo.Error && e.Info != SqlNotificationInfo.Delete)
{
string connstr = System.Configuration.ConfigurationManager.ConnectionStrings["cnnStr"].ConnectionString;
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
SearchResult result= SearchResult.Parse(conn, Caller.TaskID);
conn.Close();
Caller.endsearch(result);
}
}
public void Search(SearchParam search)
{
string connstr = System.Configuration.ConfigurationManager.ConnectionStrings["cnnStr"].ConnectionString;
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
search.ClientID = Caller.id;
int QueryID = search.Save(conn);
Caller.TaskID = QueryID;
SqlCommand cmd = new SqlCommand(String.Format("SELECT Completed FROM dbo.Tasks WHERE TaskID={0}", QueryID), conn);
SqlDependency dep = new SqlDependency(cmd);
dep.OnChange += OnChange;
cmd.ExecuteReader();
conn.Close();
}
}
相关问题
- 1. 如何等待状态更改过渡在Silverlight 4中完成?
- 2. 等待在Selenium Webdriver中更改按钮状态
- 3. 如何等待对象改变状态
- 4. 更改状态为“等待上传”的应用的设置
- 5. SetState回调不等待状态更新
- 6. 超时等待状态更改(变量更改)的有效方法?
- 7. Elasticsearch等待索引状态
- 8. 等待后检查状态()
- 9. 让JSF等待数据库
- 10. 如何将待处理状态更改为付费状态
- 11. 等待数据库中的列值更新并在C#中重新绘制值?
- 12. 使用link_to_remote更改数据库状态的问题?
- 13. 基于计时器的状态更改保存到数据库
- 14. twitter api更新状态'和数据库'
- 15. 等待状态改变的方法应该是const吗?
- 16. PHP:改变用户等待批量接受的状态
- 17. 的VBScript:等待数据库执行
- 18. 等待setOnItemClickListener中的变量更改
- 19. 等待textarea中的文本更改
- 20. 等待变量更改
- 21. 在React + Redux中更改数据时的更新状态
- 22. 跟踪数据库状态更改sql server
- 23. Mysql数据库更改状态时使用Push.js推送通知
- 24. 为数据库状态更改创建任务计划程序
- 25. XSS更改ASP.NET会话状态
- 26. Java锁状态等待并通知:IllegalMonitorStateException
- 27. 在jQuery中,如何等待ASP.NET Multiview通过PostBack更改其ActiveViewIndex?
- 28. 在C#ASP.NET中动态更改SessionID
- 29. Asp.Net Signal R - 检测数据库中的更改? Asp.net Web窗体
- 30. 应用程序审查状态(始终“等待上传”)不会更改
你可以把一个“加载”占位符,并使用javascript/ajax来查询服务每5 ... 10..15 ... 30秒(无论对你的用例/预期负载有意义)看看结果何时准备好,然后将用户重定向到结果页面/刷新页面? – 2012-07-12 11:59:14