我正在将SQL Server 2016用于.Net应用程序[框架4.5]。我在SQL中使用CLR调用,以便根据CRUD操作将一些数据传递到客户端/浏览器。
例如:SignalR通知/调用,使用程序集的Web服务调用
我们是否可以使用SQL Server CLR进行直接的Web服务调用。任何建议/帮助将不胜感激
答案 0 :(得分:0)
如果您可以基于数据库中发生的事情进行调用,那么@lasse的建议是让服务检索数据并进行必要的调用是一个好主意。
除此以外,SQLCLR可能是您最好的选择。我知道SQL Server Service Broker具有外部调用的概念,但是几年前,我发现它的性能并不高。
第三个选择是使用SQL Server机器学习服务及其Python功能来调出数据库并让您的调用在外部执行。但是,这将需要SQL2017。在2016年,您可以使用R,但我不知道R是否具有执行所需功能的能力。
希望这会有所帮助!
尼尔斯
答案 1 :(得分:0)
我们的一位客户拥有类似的基础架构,可以在2个不同的系统之间进行通信。
表上的触发器调用SQLCLR过程,该过程发出HTTP Web API请求以发布数据。
发现问题 :由于它是一个完整的事务范围,因此前端触发的CRUD操作开始等待,直到SQLCLR发布消息为止。
使用线程名称空间将SQLCLR过程作为异步方法。
发现问题 :即使该方法也引起了问题,并且在端点不可用时丢失了消息。
实现了SQL Server代理,以中断触发消息和发布消息之间的事务。并从SQL服务代理发出HTTP请求以激活存储过程。这解决了该问题,因为它在添加到队列后中断了事务。
优点 使用服务代理作为SQLCLR的包装,您可以中断事务,消息存储在队列中,永不丢失,我们也可以使用服务代理 如果需要,可以在2个不同的SQL Server实例之间进行通信。