如何从 SQL 服务器触发器调用 restful 服务
How to call restful service from SQL Server trigger
我需要使用 SQL 服务器数据库 table 中插入事件的单个参数调用 restful Web 服务。我知道这不是理想的设计,但我无法控制任一端点。此功能的使用在最大负载下不会超过 100 events/min。
我对其他想法持开放态度,但我提出的两个选择是;
- 插入触发器 - 服务代理 - .NET windows 调用 Web 服务的服务
- 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 服务器内的存储过程,或单独的独立程序,例如命令行工具或任何有意义的东西)。
我需要使用 SQL 服务器数据库 table 中插入事件的单个参数调用 restful Web 服务。我知道这不是理想的设计,但我无法控制任一端点。此功能的使用在最大负载下不会超过 100 events/min。
我对其他想法持开放态度,但我提出的两个选择是;
- 插入触发器 - 服务代理 - .NET windows 调用 Web 服务的服务
- 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 服务器内的存储过程,或单独的独立程序,例如命令行工具或任何有意义的东西)。