2016-09-15 147 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

回答

相关问题