什么是从触发器内调用webservice的最佳实践(SQL Server)

问题描述:

当表中的特定列发生更改时,我需要调用webservice。我可以处理决定插入/更新/删除中更改哪列,但我不知道我应该如何调用web服务。什么是从触发器内调用webservice的最佳实践(SQL Server)

web服务不在现场,我们对它有一点控制(我们可以要求更改并获得相当快的响应),但服务是一项正在进行的工作,我们的代码也是如此。

的SQL Server版本是2005

更新:多在此应用程序的业务逻辑是在SQL层。没有办法让我改变它,抱怨这不是我的时间。就是这样。希望有一个业务逻辑层,但部分位于pres层,部分位于SQL层。桌子上的触发器是最核心的地方。

+0

您仍然可以将Web服务与触发器分离。只需按照答案中的几种方式添加一个间接级别即可。 – dkretz 2009-02-23 19:03:01

不要。 Web服务的开销与数据库的执行处理周期不兼容。把它从数据库中取出(最好是)使其成为异步 - 参见下面各种答案中的“队列/监视器”。

也可能是Duplicate question

+0

+1 - 对此有所了解。 – 2009-02-23 18:55:38

让触发器在Web服务需要的任何数据的表中插入一行,然后让外部进程监视该表并在出现新行时调用Web服务。

CLR函数可以使Web服务请求和处理响应。 但这是你的情况,你可能想要创建一个CLR函数并在你的SQL对象内的某处调用函数。

我建议在高层而不是数据库级别进行Web服务调用。例如,在您的代码中修改该列的数据访问层。

关闭端口80上的SQL盒

另外一个触发应该是平均和精益和尽可能快地返回大部分商店,你不想从触发调用外部事物

转储数据从一个触发器到另一个表,然后编写另一个过程,检查该表,然后执行Web服务调用

我只是重新说明已经说过的话。我曾经在这个已经实施的情况下工作,这是一场噩梦。

由于触发器会执行对Web服务的调用,因此行将被锁定,因此您将最终得到一个无响应的数据库。因此,如果Web服务速度较慢或网络延迟较高,则会长时间运行事务来锁定行并降低数据库的并发性。

我看到这个实现的网站被更改为与驼鹿描述一样,并且随着数据库并发性显着增加,整个应用程序获得了巨大的提升。