Я работаю на 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, который не работает.
Может ли кто-нибудь помочь? ?