【问题标题】:C# .NET SqlDependencyC# .NET SqlDependency
【发布时间】:2012-07-13 15:11:47
【问题描述】:

我对 .NET 中 SqlDependency 的使用有疑问。我已经阅读了文档,但我仍然不清楚 OnChange 事件是否在其自己的线程中被调用。因此,例如,如果我得到 30 个并发事件,它们每个都有自己的 OnChange 偶数处理程序吗?我问的原因是,如果在 OnChange 处理程序中完成的工作阻止了下一个事件,我不想用这个创建引擎。

例如,我有一个 Orders 数据库的 SqlDependency,每次有新订单时,我都会收到 OnChange 事件,然后我可以处理用户的订单。这不会阻止其他人进来,对吗?

另外,您发现使用这种方法有什么问题吗? SqlDependency 似乎是一个非常强大的功能,所以我希望它可以这样工作。 ;)

谢谢

【问题讨论】:

    标签: c# .net sql-server sqldependency


    【解决方案1】:

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx

    根据上面链接中 SQLDependancy 类的 msdn 信息中的注释,quote->

    "The OnChange event may be generated on a different thread from
     the thread that initiated command execution. "
    

    另一方面,在同一页上是以下注释,引用->

    "SqlDependency was designed to be used in ASP.NET or middle-tier 
     services where there is a relatively small number of servers 
     having dependencies active against the database. It was not 
     designed for use in client applications, where hundreds or
     thousands of client computers would have SqlDependency
     objects set up for a single database server. "
    

    【讨论】:

    • 再次,非常模糊的信息。 “可能在不同的线程上生成”并不能完全回答我的问题。至于第二部分,正如您从我的问题的示例中看到的那样,这是在中间层(接受客户订单)。那么,这会阻止其他事件还是会在自己的线程中处理所有并发事件?
    • 另外,其他中型网站如何处理此类事务,您需要对更新采取行动,然后将数据处理到另一个数据库,那里有出错的机会并且需要再次处理?
    • 我目前在数据库机器上运行了一个 Windows 服务,该服务对 Orders 数据库具有 sqldependency,并且对于每次插入,我都在处理数据并将其分派到另一台服务器的数据库。如果调度失败,我会在 windows 服务中设置一个计时器,间隔一分钟,以处理任何未处理的订单。我不得不假设这是一个非常常见的场景。其他 Web 应用程序如何做到这一点?这是我能想到的让它工作的唯一方法,所以我想知道是否会阻止任何或所有并发订单的处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多