当表中的特定列发生更改时,我需要调用Web服务。我可以处理插入/更新/删除中更改了哪个列的决定,但我不确定应该如何调用webservice。
网络服务是非现场的,我们对它有一点控制权(我们可以要求更改并获得相当快速的响应),但服务正在进行中,我们的代码也是如此。
SQL Server版本是2005年。
更新:此应用中的大部分业务逻辑都在SQL层中。我没办法改变它并且抱怨它并不能很好地利用我的时间。就是这样。希望有一个业务逻辑层,但它部分位于pres层,部分位于SQL层。表中的触发器是最重要的位置。
答案 0 :(得分:13)
别。 Web服务的开销与数据库的执行处理周期不兼容。将它从数据库中取出并(最好)使其异步 - 请参阅下面各种答案中对“queue / monitor”的引用。
也可能是Duplicate question。
答案 1 :(得分:5)
让触发器在表中插入一行,包含Web服务所需的任何数据,然后让外部进程监视该表,并在出现新行时调用Web服务。
答案 2 :(得分:1)
CLR功能可以发出Web服务请求并处理响应。 但是在这种情况下,您可能希望创建一个CLR函数并在SQL对象中的某个位置调用该函数。
我建议在高层而不是数据库级别进行Web服务调用。 例如,代码中的数据访问层修改了该列。
答案 3 :(得分:1)
大多数商店在SQL框上关闭端口80
触发器应该是平均值和精益值并且尽可能快地返回,您不希望从触发器调用外部事物
将数据从触发器转储到另一个表中,然后编写另一个检查该表然后进行Web服务调用的进程
答案 4 :(得分:1)
我只想重复已经说过的话。我曾经在已经实施的情况下工作,这是一场噩梦。
您将最终得到一个非响应数据库,因为当触发器执行对Web服务的调用时,行将被锁定。因此,如果Web服务很慢或者网络延迟很高,那么长时间运行的事务会锁定行并降低数据库的并发性。
我看到这个实现的站点被改变为和moose描述的一样,整个应用程序获得了巨大的推动,因为数据库并发性大大增加。