從TSQL調用Web服務的最佳方式是什麼?我想編寫一些調用Web服務的觸發器。有沒有一個常用的最佳做法呢?從TSQL調用Web服務的最佳方式
實現將需要在SQL Server中處理2005年和2008年
從TSQL調用Web服務的最佳方式是什麼?我想編寫一些調用Web服務的觸發器。有沒有一個常用的最佳做法呢?從TSQL調用Web服務的最佳方式
實現將需要在SQL Server中處理2005年和2008年
從一切,我聽說過,它沒有那種「最佳做法」從任何地方做的網站叫「內」的數據庫,然後從一個觸發器中進行網絡電話讓我望而卻步[延遲,延遲,阻塞,死鎖...... oog]。數據庫有很好的後端,但前端很差。你可能很多,有一個專門的應用程序做你的網絡和數據庫協調好多了。
接線東西放到一個SQL代理呼叫可能會奏效,但要注意,沒有「本地」的方式從一個作業步驟中調用一個網站。他們可能是故意這樣設計的。
我知道你可以在SQL Server中嵌入.NET CLR代碼,但無論是CLR代碼可以從一個觸發器被調用,我不知道。 我想通過讓一張表在您需要調用Web服務時插入記錄,並讓一個外部應用程序運行以輪詢表並從那裏調用Web服務來考慮不同的體系結構。 如果您嘗試直接在觸發器內調用Web服務,您將會遇到許多調試錯誤,錯誤日誌等問題。 只是我2美分。
+1,我不認爲在SQL事務的中間調用Web服務是個好主意。每個觸發器都在自動事務中使用觸發語句運行。您將持有整個交易的鎖定,如果您在觸發命令和其他命令周圍有自己的交易,則還需要更多時間。觸發器需要運行得非常快,否則系統會放慢速度。 – 2010-04-21 13:38:27
如這裏已經提到的,使得從觸發一個Web服務的調用會殺了你的數據庫的性能,由於它會採取撥打電話的時間。
的SQL Server確實有一個叫SQL Server Broker這是專爲到SQL Server集成的異步消息傳遞功能。雖然我現在已經有了自己使用它的經驗,但如果您希望保留SQL Server中的所有處理邏輯,這可能是一個很好的起點。
如果可以,雖然我會建議把調用該服務的任何應用程序使用的數據庫的責任。在這個級別,你將能夠處理延遲而不佔用數據庫。
正如@基思的回答中所提到的,對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
感謝您的意見。 – 2010-04-21 14:55:25