【发布时间】:2017-07-24 20:25:27
【问题描述】:
我需要从 SQL Server 数据库表中的插入事件中调用一个带有单个参数的 RESTful Web 服务。我知道这不是理想的设计,但我无法控制任何一个端点。在最大负载下,此功能的使用不会超过 100 个事件/分钟。
我对其他想法持开放态度,但我想出的两个选择是;
- 插入触发器 - 服务代理 - .NET windows 服务以调用 Web 服务
- C# CLR 触发器直接调用 RESTful 服务
我一直在处理选项 2 并在 Visual Studio 中创建了一个 SQL CLR 触发器项目,但是在我添加对 System.Web 的引用后,该项目将无法构建并且没有构建错误,而只是在中显示“构建失败”输出窗口。
对于可以在 CLR 触发器中使用哪些 CLR 库有一些限制吗?
使用服务代理让我很害怕,因为我只与服务代理合作过一个项目,发现实施起来非常困难。
任何关于如何从触发事件调用 Web 服务的想法将不胜感激。
【问题讨论】:
-
为什么你需要在 SQL CLR 触发器中引用
System.Web?触发器是后台工作人员-System.Web主要包含基于 webforms 的 GUI 控件-非常不清楚您为什么需要此参考。是的:SQL CLR 有一组非常有限的程序集,这些程序集已经部署在 SQL Server 中 -
另外:触发器在触发它的语句的上下文和范围内运行。触发器应该非常灵活 - 小而快。你永远不应该从触发器调用外部服务,你不应该在触发器中包含游标——所有这些都会降低你的系统性能,而且真的是非常糟糕的事情。尝试重新考虑您的情况并确保触发器只执行非常小的任务 - 没有繁重的工作,没有冗长的计算,没有外部调用等。
-
我正在从调用 restful 服务的现有项目中复制引用。我不确定我需要哪些并全部使用,调用 Web 服务的代码使用
(HttpWebRequest)WebRequest.Create(EndPoint + parameters);。我也许可以只使用 System.Net -
好的,所以也许我确实需要考虑使用服务代理。还有其他方法可以将触发器与对服务的调用分离吗?
标签: c# sql-server rest database-trigger