Могу ли я вызвать удаленную веб-службу из хранимой процедуры и использовать возвращаемые значения?


Если вы используете SQL 2005/2008, вы можете сделать это из хранимой процедуры CLR, если у вас есть возможность установить и запустить их. Для получения дополнительной информации:
Компонент Service Broker может предоставить те функции, которые вам нужны.
Как сообщает AntiSanta, это возможно с использованием хранимой процедуры CLR. Реальный вопрос в том, можно ли вообще этого избежать. Вызов веб-службы из хранимой процедуры кажется перевернутым. В идеале у вас должен быть какой-то другой сервис / приложение / уровень, который вызывает как хранимую процедуру, так и веб-сервис. Возможно, сохраненная процедура возвращает значения параметров для веб-службы, и вы фиксируете свою локальную транзакцию после завершения вызова WS.
Это значительно упростит отладку, развертывание и поддержку в долгосрочной перспективе и разъединит прямую ссылку между хранимой процедурой и веб-службой.
В SQL Server 2000 и выше (если среда CLR не включена) вы можете использовать COM через хранимые процедуры (sp_OACreate, sp_OAMethod и т. д.), Если у вас есть существующая оболочка COM для вашей веб-службы.
Вот мой код, который работает.
exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
if @hr < 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp failed',16,1)
return end
exec @hr = sp_OAMethod @obj, 'Open', NULL, 'GET', @UrlString, false
if @hr <0 begin set @msg = 'sp_OAMethod Open failed' goto eh end
exec @hr = sp_OAMethod @obj, 'send'
if @hr <0 begin set @msg = 'sp_OAMethod Send failed' goto eh end
exec @hr = sp_OAGetProperty @obj, 'status', @status OUT
if @hr <0 begin set @msg = 'sp_OAMethod read status failed' goto eh end
if @status <> 200 begin set @msg = 'sp_OAMethod http status ' +str(@status) goto eh end
exec @hr = sp_OAGetProperty @obj, 'responseText', @response OUT
if @hr <0 begin set @msg = 'sp_OAMethod read response failed' goto eh end
exec @hr = sp_OADestroy @obj
select @response
......
а:
exec @hr = sp_OADestroy @obj
Raiserror(@msg, 16, 1)
Return
Есть ли у вас другие рекомендации? У меня есть программа Access (adp Writen в VBA) с серверной частью sql. Я хотел бы вызвать веб-сервис из доступа, но не хочу использовать надстройку com. Я звоню в веб-службу на удаленном сервере (в головном офисе), которая дает мне номер заказа на покупку.