0

我正在构建一个 Web 应用程序,其中用户提交的作业由后台服务处理,并且 Web 应用程序和后台服务之间的通信是在数据库上完成的。因此,当搜索开始时,Web 应用程序会在 db 中插入一条记录,并等待记录的状态字段发生变化。据我了解,如果我在请求线程上实现此功能,我会不必要地阻塞其中一个池线程,但无法让我的头脑异步执行此操作。在这种情况下,最佳做法是什么?

4

2 回答 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 回答