вызов веб-службы от SQL с помощью sp_OAMethod - PullRequest
0 голосов
/ 03 февраля 2020

Я работаю на SQL Server 2016. Я пытаюсь вызвать веб-службу из SQL хранимой процедуры. Я всегда получал ошибку 0x80072EE2 (send failed) при вызове метода отправки

Я уже просмотрел несколько статей здесь, но пока все решения не работают для меня. Самое смешное, что другие вызовы веб-служб из других хранимых процедур работают хорошо, поэтому я подозреваю, что это связано с тем, что URL-адрес назначения известен на сервере. Я уже посмотрел в файле хоста, но в нем ничего нет, кроме стандартных записей

То, что я пробовал, было так:

DECLARE @methodName varchar(50) = 'GET'
DECLARE @soapAction varchar(255) = '?serviceEndpoint=%2Fsurveys%2F767940&apiKey=96141f09-7396-e33e-f6fb-bcc8f5aaeb28&method=get'
DECLARE @requestBody varchar(8000) = '' 

declare @statusText varchar(1000)
declare @status varchar(1000) 
DECLARE @responseText nvarchar(max) = ''
DECLARE @errorText nvarchar(max) =''

DECLARE @UriIntern varchar(1000) = 'http://stage.pantaenius.com/pantaenius-website/application/netigate/request.do'
declare @completeUrl nvarchar(1000) = @UriIntern +@soapAction

DECLARE @Object INT;


DECLARE @methodName varchar(50) = 'GET'
DECLARE @objectID int
DECLARE @hResult int
DECLARE @source varchar(255), @desc varchar(255) 

DECLARE @contentType nvarchar(100) = 'application/json; charset=utf-8'
--'MSXML2.XMLHTTP'
EXEC @hResult = sp_OACreate 'MSXML2.ServerXMLHTTP', @objectID OUT

--EXEC @rc   =   sp_OASetProperty   @objServHTTP,'setTimeouts',resolveTimeout,connectTimeout,sendTimeout,receiveTimeout
EXEC @hResult   =   sp_OASetProperty   @objectID,'setTimeouts','5000','5000','50000','30000'
-- open the destination URI with Specified method 
EXEC @hResult = sp_OAMethod @objectID, 'open', null, @methodName,@completeUrl, 'false', '',''

-- send the request 
EXEC @hResult = sp_OAMethod @objectID, 'send'--, null, @requestBody 
IF    @hResult <> 0 
BEGIN
      EXEC sp_OAGetErrorInfo @objectID, @source OUT, @desc OUT
      SELECT      hResult = convert(varbinary(4), @hResult), 
            source = @source, 
            description = @desc, 
            FailPoint = 'Send failed', 
            MedthodName = @methodName 
      goto destroy 
      return
END


-- Get status text 
exec sp_OAGetProperty @objectID, 'StatusText', @statusText out
exec sp_OAGetProperty @objectID, 'Status', @status out

select @status, @statusText, @methodName 

-- Get response text 
exec sp_OAGetProperty @objectID, 'responseText', @responseText out

destroy: 
exec sp_OADestroy @objectID

select @responseText, @status, @errorText

Я знаю, что пример не является исполняемым, потому что я не предоставьте правильный URL, потому что по соображениям безопасности. Но URL-адрес и его параметры запроса верны - я получаю правильный ответ, когда вводю их, например, chrome или firefox. Это просто вызов SQL, который не работает.

Может ли кто-нибудь помочь? ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...