0

我有一个可以接收来自 3rd 方软件的消息的表,我需要一个触发机制来调用我的 dotnet 代码。触发器调用 SQLCLR 的优缺点是什么,然后它可以调用 Web 服务,例如让我的代码轮询表以进行更改。怀疑表的平均负载会很少,可能每天几千个事务。

4

2 回答 2

3

我个人永远不会在触发器中调用 Web 服务。我会编写一个服务来轮询表中的新数据并异步调用 Web 服务。

主要问题是,如果您在触发器中调用 Web 服务,那么您可能会遇到长时间保持锁打开的情况。如果该锁已升级为表锁,那么您将在此期间阻塞表上的所有操作。

如果您对 Web 服务的调用因任何原因失败,它也不会为您提供非常好的重试策略。您是否希望您的触发器以某种方式标记行以便稍后重试?什么会触发重试?

使用基于服务的方法,您可以让它变得更加简单,并且遇到锁定问题的可能性要小得多——这在最好的时候很难诊断——特别是如果它们是暂时的。

于 2012-06-06T22:31:17.500 回答
1

你没有说你使用的是什么版本的 SQL Server,但如果是 2005+,Service Broker就是为此而设计的。在您的触发器中,在队列中放置一条(短)消息。让您的服务在队列上执行 WAITFOR,然后触发 RECIEVE 来获取消息。比旋转循环更好,看看是否无事可做。

于 2012-06-07T01:52:02.867 回答