sql-server – 在MSSQL触发器中使用POST方法

当触发器执行时,我需要将一些信息POST(HTTP方法)到外部URL.
我知道使用触发器时会有很多安全性和性能影响,所以我担心这不是进行此类处理的地方.但无论如何,我发布这个是为了获得一些关于如何处理问题的反馈或想法.一些考虑:

>触发器中触发的事务可能是异步的.
>该过程必须处理授权
>结束URL是互联网上的PHP脚本.

真正触发此执行的应该是向表中插入或更新一条记录,因此我必须使用此触发器,因为我无法触及(第三方)应用程序.

另外,服务经纪人可以考虑一下吗?
任何想法都将受到欢迎.

最佳答案
你是对的,这不是你想要在触发器中做的事情.您在应用程序中想要的最后一件事是在每次更新/插入/删除时引入HTTP请求的延迟,即使在运行良好的情况下也会非常明显.但是当事情工作不好时,它会非常糟糕:当HTTP资源出现可用性问题时,添加的耦合将导致应用程序失败,更糟糕的是与回滚相关的正确性问题(执行触发器的事务可能会回滚,但是HTTP调用已经完成).

这就是为什么最重要的是引入一个将触发器与HTTP调用分离的层,这是通过队列完成的.无论是用作队列的表,还是Service Broker队列,甚至是MSMQ队列都由您来进行调用.最简单的解决方案是use a table as a queue

>触发器将对要进行的HTTP调用的请求进行排队(插入)
>在运行触发器提交的事务之后,该请求可用于出列
>监视(轮询)队列的外部应用程序获取请求并放置HTTP调用

Service Broker优于自定义表 – 队列的优势是Internal Activation,这将允许您的HTTP处理代码在队列中有待处理的项目时按需运行,而不是轮询.但是,通过SQLCLR从引擎内部进行HTTP调用是非常不明智的建议.外部进程对于访问HTTP等内容要好得多,因此不保证Service Broker的复杂性.

转载注明原文:sql-server – 在MSSQL触发器中使用POST方法 - 代码日志