使用T-SQL调用Web服务

时间:2014-09-09 12:49:09

标签: c# sql sql-server web-services

我试图在AFTER触发器事件上通过T-SQL调用Web服务。到目前为止,我只返回NULL值。我不知道在这一点上我哪里出错了,坦率地说不明白这段代码实际上是做什么的。这将是一个很好的起点。我从this代码项目链接中复制了代码,但它似乎不起作用。任何人都知道我做错了什么?

CREATE PROCEDURE [dbo].[sp_TEST]
AS
BEGIN

    DECLARE @obj INT, 
    @response varchar(200),
    @sUrl varchar(200)

        set @sUrl = 'http://localhost:57961/Service1.asmx?op=CelsiusToFahrenheit&Fahrenheit=' + '100';

        EXEC sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
        EXEC sp_OAMethod @obj, 'Open', NULL, 'GET', @sUrl, false
        EXEC sp_OAMethod @obj, 'send'
        EXEC sp_OAGetProperty @obj, 'responseText', @response, OUT

        SELECT @response
        EXEC sp_OADestroy

END

1 个答案:

答案 0 :(得分:1)

我同意上面的所有陈述不要在触发器中执行此操作。你可以严重锁定桌子。

但是我之前使用Service Broker和CLR函数做了这个。我们的想法是在Service Broker队列上放置一个事件,并将其异步发送到调用CLR的接收器。

由于服务代理是异步的,因此触发器几乎总是立即完成,并且最小化影响插入,更新行的时间。例如,如果队列中毒,您可能希望将事件插入队列表然后报告错误,这有一些小警告。然后,您可以在队列修复后重新发送这些事件。

当您使用CLR时,您可以非常好地利用.Net和Web服务的强大功能,这比尝试进行一些COM自动化要好得多。

建议您通过Remus Rusano在高性能服务代理队列上阅读博客。我们在一台开发笔记本电脑上设法在24小时内筹集了8100万个活动,但由于这不是1,2,3开发工作,因此它需要一些严重的肘部油脂。

Remus也是DBA stackexchange站点上非常活跃的成员,因此您可以在那里获得更多信息。