C# 用T-SQL调用web服务

C# 用T-SQL调用web服务,c#,sql,sql-server,web-services,C#,Sql,Sql Server,Web Services,我试图在触发事件后通过T-SQL调用上的webservice。到目前为止,我只返回NULL值。我不确定我在这一点上会错在哪里,坦率地说,我不理解这段代码实际上在做什么。那将是一个很好的起点。我从代码项目链接复制了代码,但它似乎不起作用。有人知道我做错了什么吗 CREATE PROCEDURE [dbo].[sp_TEST] AS BEGIN DECLARE @obj INT, @response varchar(200), @sUrl varchar(200)

我试图在触发事件后通过T-SQL调用
上的webservice。到目前为止,我只返回
NULL
值。我不确定我在这一点上会错在哪里,坦率地说,我不理解这段代码实际上在做什么。那将是一个很好的起点。我从代码项目链接复制了代码,但它似乎不起作用。有人知道我做错了什么吗

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

我同意上面所有的说法,但这不是一个触发。你可能会把桌子锁坏

然而,我不久前使用ServiceBroker和CLR函数完成了这项工作。其思想是在ServiceBroker队列上放置一个事件,并向调用CLR的接收方异步触发该事件

由于ServiceBroker是异步的,触发器总是几乎立即完成,并且对插入、更新行的时间影响最小。这里有一些小注意事项,例如,如果队列中毒,您可能希望将事件插入队列表,然后报告错误。一旦队列被修复,您就可以重新发送这些事件

当您使用CLR时,您可以非常好地利用.Net和web服务的功能,这是一个比尝试进行一些COM自动化要好得多的解决方案

建议您阅读关于高性能ServiceBroker队列的博客。我们在一台开发笔记本电脑上成功地在24小时内举办了8100万场活动,但这需要一些认真的努力,因为这不是一项1,2,3的开发工作


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

仅我的2ct:有适合该作业的工具,也有不适合该作业的工具。猜猜我读到问题标题时的第一个想法是什么?@ThorstenDittmar我希望这是一个有用的问题,比如“什么是正确的工具”?不要这样做-触发器应该非常快速和灵活-不要在触发器内进行任何广泛的处理或冗长的web服务调用!这将破坏您的系统性能…@marc_好的,我知道这不是一个好主意,但我需要一个在插入新记录时触发事件的应用程序。如果你需要调用一个web服务,我会让触发器在一个单独的表中写一个“note”,然后在某个地方有一个单独的C#/VB.NET服务或控制台应用程序,定期检查“command table”中的条目。如果有任何东西在那里-该应用程序可以打电话,并在需要时更新数据-但触发器本身不应该做这样的事情。