SQL触发器可以调用Web服务吗?

| 我正在为iPhone应用程序构建RESTful API。 当用户“签入” [将新行插入表中]时,我想从该插入中获取数据并调用Web服务,该Web服务将基于该插入发送推送通知。 我能想到的唯一方法是通过ѭ0进行操作,或者具有实际的插入方法,一旦成功插入,就调用Web服务。对我来说,这似乎是个坏主意。 想知道您是否对此有任何想法,或者是否有我没有想到的更好的方法。     
已邀请:
        即使技术上可行,这也不是一个好主意!触发器应该非常精简,并且绝对不应该涉及冗长的操作(Webservice调用肯定是这样)!重新考虑您的架构-应该有更好的方法来做到这一点! 我的建议是将触发器中需要调用Web服务的“通知”任务与该Web服务调用的实际执行分开。 就像是: 在您的触发代码中,在表中插入一个“稍后再调用Web服务”(只需ѭ1即可保持其精简和快速-仅此而已) 具有异步服务(SQL作业,最好是Windows NT服务),该服务与实际触发器执行分开进行那些调用,并将从该Web服务检索到的所有数据存储到数据库中的相应表中。 触发器是一个非常挑剔的事情-它应该总是非常快,非常精简-最多执行ѭ1或两个--一定要避免在触发器或其他冗长的操作(如Web服务调用)中使用游标 Brent Ozar在不可扩展的十大开发人员失误上进行了精彩的网络广播(在SQL PASS上进行了演示),而触发器是他关注的第一件事!强烈推荐     
        这取决于业务需求。通常,我会避免使用触发器,因为这是一种业务逻辑,应该由BL处理。 但是答案是肯定的-您可以执行此操作,只需确保异步调用Web服务即可,这样它就不会在Web服务调用完成时延迟插入。 您也可以考虑使用OneWay网络服务-即失火。 但是,正如其他人指出的那样-最好不要使用触发器。 如果架构正确,则应该只有一段代码可以与数据库进行通信,即仅在单个服务中对DAL进行某种抽象。插入后,钩在那里做任何需要的事情。 如果有许多不同的应用程序可以直接访问数据库而不通过DAL服务访问数据库,那么我将使用触发器。这又是一场灾难,等待发生。 如果必须处理内部托管的第三方应用程序,即如果我可以访问数据库服务器本身,但不能访问写在数据库中的代码,则可以使用触发器。     
        那存储过程呢?而不是在触发器上进行设置,而是调用存储过程,该过程将插入数据,并可能执行其他操作。 据我所知,触发器的作用范围非常有限。存储过程可能具有更大的作用域(或可能没有)。 在最坏的情况下,您始终可以构建自己的\“ API \”页面;而不是直接插入数据,而是请求API页面,该页面既可以插入数据又可以进行推送通知。     
        触发器->队列-> SP-> XP_XMDShell-> BAT-> cURL->第三方Web服务 我使用触发器在Queue表中插入一条记录, 然后使用光标将存储的过程拉出排队的条目。 我没有WSDL,也没有访问第三方API开发人员的权限,并且迫切需要完成原型,因此存储过程调用XP_CMDShell并调用带有参数的.bat文件。 bat文件调用cURL,该URL管理REST / JSON调用和响应。 它是免费,快速且可靠的。不是纯粹的架构,而是使原型起步。     
一个好的做法是让该网页在用户点击该页面时进入另一个表(我将调用message_queue)。 然后在服务器上安装Windows服务/ * nix守护程序,以扫描message_queue表并通过Web服务将其推送到移动应用程序。您可以利用SQL中事务处理的功能来管理队列处理。 这种方法的好处是,您可以从一台独立服务器上的所有内容开始,甚至可以在扩展时将网站,数据库,服务/守护程序分离到不同的物理服务器或服务器群集上。     

要回复问题请先登录注册