【发布时间】:2016-09-07 00:11:16
【问题描述】:
我有一个任务,我可以控制数据库,但不能控制对 SQL Server 2008 R2 数据库执行 CRUD 操作的应用程序。
理想情况下,我想在对数据表执行插入操作后立即调用 (POST) Web API(请注意,我不必等待 API 响应)。
实现这一目标的想法
-
在数据表上创建一个 SQL Server 触发器(启用了 CLR,但它是 SQL Server 2008R2,因此它使用的是 .Net 2.0)。
作为触发器的一部分,我可能必须创建一个存储过程来调用 Web API (POST)(它应该是一劳永逸,因为我不必等待 API 响应)。
-
Service Broker 和依赖注入警报 ---> 这很好用,但我担心并发性。
-
传统投票
问题:如果我采用第一个解决方案,触发器是否在与插入操作相同的事务范围内执行?如果 Web API 关闭,是否会延迟插入操作?这个方法处理并发吗?
您还有其他推荐的方法吗? (请在解决方案中包括优缺点)
【问题讨论】:
-
“很快”多久了?
-
好一个。我应该使用“实时”而不是“很快”
-
我对第三个了解不多。至于第一个和第二个,我认为你应该同时做防御方法:创建一个 SQL 触发器来保护你的持久层;服务代理和依赖注入可保护您的 Web 应用程序层。 1 更多是 DBA 的任务,2 是软件工程师的任务。两者都很好。请注意,您不应创建存储过程 (SP),而应创建 TRIGGER,它会在 SQL Server 的 INSERT 操作之后立即执行。此触发器验证包含在同一事务中。如果出现任何错误,事务将被回滚。
-
触发器是否在与插入操作相同的事务范围内执行?如果 Web API 出现故障,是否会延迟插入操作? YES 在两个帐户上 - 这就是您应该从不做任何繁重工作的原因之一,广泛的处理,或在触发器内调用外部服务等。
标签: c# sql-server asp.net-web-api triggers sqldependency