如何从 SQL 服务器触发器调用 restful 服务

How to call restful service from SQL Server trigger

我需要使用 SQL 服务器数据库 table 中插入事件的单个参数调用 restful Web 服务。我知道这不是理想的设计,但我无法控制任一端点。此功能的使用在最大负载下不会超过 100 events/min。

我对其他想法持开放态度,但我提出的两个选择是;

  1. 插入触发器 - 服务代理 - .NET windows 调用 Web 服务的服务
  2. C# CLR 触发器直接调用 restful 服务

我一直在研究选项 2,并在 Visual Studio 中创建了一个 SQL CLR 触发器项目,但是在我添加对 System.Web 的引用后,该项目将无法构建并且没有构建错误,vs 只是在输出 window 中说 "build failed"。

在 CLR 触发器中可以使用哪些 CLR 库有一些限制吗?

使用 Service Broker 令我感到害怕,因为我只使用过 Service Broker 做过一个项目,发现实施起来非常困难。

任何有关如何从触发事件调用 Web 服务的想法都将不胜感激。

触发器在导致它触发的语句的上下文和范围内 运行 - 这意味着,在触发器完全 运行 之前,该语句不会完成。

触发器应该非常灵活 - 小而快。你不应该从触发器调用外部服务,你不应该在触发器中包含游标,你不应该在触发器中做任何繁重的工作或冗长的计算。

如果您真的必须这样做,我建议您采用以下方法:

  • 看到触发器只是将一些值放入 "Command" table - long-运行ning 进程将需要完成其工作的那些值

  • 有一个分离的、独立的过程(例如存储过程或其他),它将定期检查 "Command" table 以完成新任务 - 这可以是使用 SQL 服务器代理作业在 SQL 服务器中完成

  • 解耦进程然后从 "Command" table 获取信息,它是否工作,并更新数据库(如果需要)

这样,您的触发器就小而灵活并且可以快速完成,从而不会减慢您的主进程/主系统。冗长的过程是分离的、独立的,并且可以以最有意义的方式实现(SQL 服务器内的存储过程,或单独的独立程序,例如命令行工具或任何有意义的东西)。