我正在构建一个 Web 应用程序,其中用户提交的作业由后台服务处理,并且 Web 应用程序和后台服务之间的通信是在数据库上完成的。因此,当搜索开始时,Web 应用程序会在 db 中插入一条记录,并等待记录的状态字段发生变化。据我了解,如果我在请求线程上实现此功能,我会不必要地阻塞其中一个池线程,但无法让我的头脑异步执行此操作。在这种情况下,最佳做法是什么?
问问题
1807 次
2 回答
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();
}
}
于 2012-08-18T19:43:25.227 回答
0
如果您使用 SQL Server 作为数据库,那么您可以使用名为 SQLDependency 的 ADO.NET 功能,
正确设置时的剂量是什么,当表(您将配置)发生更改时,将引发 C# 事件。这是一篇解释它的文章
注意:您必须设置 SQL 服务器才能启用此功能。
http://www.codeproject.com/Articles/12335/Using-SqlDependency-for-data-change-events
这个解释了如何在表中的数据发生变化后刷新页面
http://msdn.microsoft.com/en-us/library/e3w8402y%28v=vs.80%29.aspx
于 2012-07-12T12:15:23.033 回答