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 
相關問題