2016-09-15 259 views
1

我有一個SQL Server的奇怪問題。我有一個小的觸發器,在更新時向Web服務發出請求。SQL腳本在此服務器上運行,但不在其他服務器上

我已經測試過該代碼,它工作正常。

但是,當我將該代碼移動到另一臺SQL Server計算機時,它不會運行。沒有錯誤發生。

更新:如果我打電話給「獲取」請求,沒關係。對於「發佈」請求,該SQL Server無法處理它。兩臺服務器上的Windows 2012

我的代碼運行的調用請求:

DECLARE @dbName NVARCHAR(50) 
DECLARE @wsAction NVARCHAR(50) 
DECLARE @secret NVARCHAR(255) 
DECLARE @url NVARCHAR(MAX) 
DECLARE @idArray NVARCHAR(MAX) 
DECLARE @triggerTime DATETIME 

SET @dbName = 'dbname' + '/notification/object' 
SET @secret = 'a key' 
SET @url = 'https://myserver/api/1.0.0/customer/databaseName=' 
SET @idArray = '1,2,3' 
SET @wsAction = '"action": "modify"' 

IF(@idArray <> '') 
BEGIN 
    DECLARE @Object INT; 
     DECLARE @body NVARCHAR(MAX) 
    SET @url = @url + @dbName; 
    SET @body = '{"ids": [' + @idArray + '], ' + @wsAction +'}' 

    EXEC sp_OACreate 'MSXML2.ServerXMLHTTP', @Object OUT; 
    EXEC sp_OAMethod @Object, 'setOption', null, 2, 13056 -- by pass ssl 
    EXEC sp_OAMethod @Object, 'open', NULL, 'post', @url,'false' 
    EXEC sp_OAMethod @Object, 'setRequestHeader', null, 'secret', @secret 
    EXEC sp_OAMethod @Object, 'setRequestHeader', null, 'Accept-Encoding', 'gzip, deflate' 
    EXEC sp_OAMethod @Object, 'send', NULL, @body 
    Declare @ResponseText as Varchar(8000); 
    Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT 
    Select @ResponseText 
    EXEC sp_OADestroy @Object 
END 

「獲取」 請求I測試:

Declare @Object as Int; 
Declare @ResponseText as Varchar(8000); 

Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT; 
Exec sp_OAMethod @Object, 'open', NULL, 'get', 
                  'http://www.webservicex.com/stockquote.asmx/GetQuote?symbol=MSFT', --Your Web Service Url (invoked) 
                  'false' 
Exec sp_OAMethod @Object, 'send' 
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT 

Select @ResponseText 


Exec sp_OADestroy @Object 
+0

會發生什麼?從字面上看沒有什麼?你能展示觸發器嗎? – scsimon

+0

@scsimon:我已添加代碼 – haiduong87

+0

相同的服務器版本?相同的DB名稱?只是問問別人會想知道什麼。一開始我沒有看到問題,但會看起來更深。 – scsimon

回答

相關問題