1

从TSQL调用Web服务的最佳方式是什么?我想编写一些调用Web服务的触发器。有没有一个常用的最佳做法呢?从TSQL调用Web服务的最佳方式

实现将需要在SQL Server中处理2005年和2008年

+0

感谢您的意见。 – 2010-04-21 14:55:25

回答

6

从一切,我听说过,它没有那种“最佳做法”从任何地方做的网站叫“内”的数据库,然后从一个触发器中进行网络电话让我望而却步[延迟,延迟,阻塞,死锁...... oog]。数据库有很好的后端,但前端很差。你可能很多,有一个专门的应用程序做你的网络和数据库协调好多了。

接线东西放到一个SQL代理呼叫可能会奏效,但要注意,没有“本地”的方式从一个作业步骤中调用一个网站。他们可能是故意这样设计的。

6

我知道你可以在SQL Server中嵌入.NET CLR代码,但无论是CLR代码可以从一个触发器被调用,我不知道。 我想通过让一张表在您需要调用Web服务时插入记录,并让一个外部应用程序运行以轮询表并从那里调用Web服务来考虑不同的体系结构。 如果您尝试直接在触发器内调用Web服务,您将会遇到许多调试错误,错误日志等问题。 只是我2美分。

+3

+1,我不认为在SQL事务的中间调用Web服务是个好主意。每个触发器都在自动事务中使用触发语句运行。您将持有整个交易的锁定,如果您在触发命令和其他命令周围有自己的交易,则还需要更多时间。触发器需要运行得非常快,否则系统会放慢速度。 – 2010-04-21 13:38:27

3

如这里已经提到的,使得从触发一个Web服务的调用会杀了你的数据库的性能,由于它会采取拨打电话的时间。

的SQL Server确实有一个叫SQL Server Broker这是专为到SQL Server集成的异步消息传递功能。虽然我现在已经有了自己使用它的经验,但如果您希望保留SQL Server中的所有处理逻辑,这可能是一个很好的起点。

如果可以,虽然我会建议把调用该服务的任何应用程序使用的数据库的责任。在这个级别,你将能够处理延迟而不占用数据库。

1

正如@基思的回答中所提到的,对Web服务进行完全调用可能会非常糟糕。想象一下,Web服务已关闭,并且有很多更新被锁定并等待访问您的数据。您可以使用SQL Service Broker,here is a good tutorial将它们与触发器一起使用。以下是队列设置后的示例触发器代码。您可以随时创建一个观看队列并实际调用Web服务的服务。

--Create trigger for update 
CREATE TRIGGER dbo.Trg_DepartmentMaster_Update 
    ON dbo.DepartmentMaster FOR UPDATE 
AS BEGIN 
    SET NOCOUNT ON; 
    DECLARE @MessageBody XML 
    DECLARE @TableId int 

    --get relevant information from inserted/deleted and convert to xml message 
    SET @MessageBody = (SELECT DepartmentId,Name,Description FROM inserted FOR XML AUTO) 

    If (@MessageBody IS NOT NULL) 
    BEGIN 
     DECLARE @Handle UNIQUEIDENTIFIER; 
     BEGIN DIALOG CONVERSATION @Handle 
     FROM SERVICE [TestServiceInitiator] 
     TO SERVICE 'TestServiceTarget' 
     ON CONTRACT [TestContract] 
     WITH ENCRYPTION = OFF; 
     SEND ON CONVERSATION @Handle 
     MESSAGE TYPE [TestMessage](@MessageBody); 
    END 
END 
相关问题