Posts Categorizados ‘Ole Automation Procedures

29
set
11

Acessando dados de Web Service com Ole Automation Procedures

Olá pessoas,

Como nem sempre será possível usar SQL CLR para acessar um Web Service no SQL Server 2005+, seja pelo fato de você estar trabalhando com um SQL Server 2000 ou por não permitirem usar SQL CLR em alguns cenários, nos restam poucas alternativas.

Uma alternativa “simples” e forma a manter este processo em T-SQL, é o uso de os componentes COM+ ou OLE (como preferir), com o qual teremos um script T-SQL um pouco estranho, inseguro e instável na maioria das vezes, semelhante a um script feito em VBScript ou ASP Classic.

Se não conhecem VBScript, abaixo segue um exemplo de script para ler o retorno de Web Service que recupera dados sobre a temperatura de uma determinada cidade:

Dim objHTTP, strResponse, url

set objHTTP = CreateObject("Microsoft.XMLHTTP")

'set objHTTP = CreateObject("Msxml2.XMLHTTP")

url = "http://www.webservicex.net/globalweather.asmx/GetWeather?CityName=CURITIBA&CountryName=BRAZIL"

objHTTP.Open "get", url, False

objHTTP.Send()

strResponse = objHTTP.responseText

MsgBox strResponse

No SQL Server, o uso de componentes COM+ é feito por procedures específicas, as Ole Automation Procedures, que não estão habilitadas por padrão (ainda bem). Logo se faz necessário habilitá-las, já que vamos fazer uso delas neste artigo:

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'Ole Automation Procedures', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'show advanced options', 0
GO
RECONFIGURE
GO

Por padrão as Ole Automation Procedures são exclusivas do “sysadmin”, mas é possível dar permissão para executá-las aos usuários do banco de dados “master”, exemplo (para permissão destas procedures em outros bancos de dados, confira os artigos relacionados):

USE master
GO

CREATE LOGIN [Maria] WITH PASSWORD=N'1234'
, CHECK_EXPIRATION=OFF
, CHECK_POLICY=OFF
GO

CREATE USER [Maria] FOR LOGIN [Maria]
GO

GRANT EXECUTE ON sys.sp_OACreate TO [Maria]
GO

GRANT EXECUTE ON sys.sp_OAMethod TO [Maria]
GO

GRANT EXECUTE ON sys.sp_OADestroy TO [Maria]
GO

EXECUTE AS LOGIN = 'Maria'
GO

Para o nosso exemplo, vou utilizar a mesma ideia do que foi feito em VBScript, para recuperar a temperatura da cidade de Curitiba do Web Service pelo SQL Server:

DECLARE @objHTTP INT, @url VARCHAR(255)

DECLARE @return INT, @responseXml INT, @text NVARCHAR(4000), @xml XML

-- Criando a 'instância' do componentes

EXEC @return = sp_OACreate 'Microsoft.XMLHTTP', @objHTTP OUT

-- Componente alternativo

-- EXEC @return = sp_OACreate 'Msxml2.XMLHTTP', @objHTTP OUT

-- Verificando se a chamada obteve sucesso.

IF @return = 0 PRINT 'COM... OK'

SET @url = 'http://www.webservicex.net/globalweather.asmx/GetWeather?CityName=CURITIBA&CountryName=BRAZIL'

-- Chamando o método Open, informando a url

EXEC @return = sp_OAMethod @objHTTP, 'Open', NULL, 'GET', @url, 0

IF @return = 0 PRINT 'Open... OK'

-- Chamando o método Send

EXEC @return = sp_OAMethod @objHTTP, 'Send'

IF @return = 0 PRINT 'Send... OK'

-- Recuperando a resposta do Web Service

EXEC @return = sp_OAMethod @objHTTP, 'ResponseXML', @responseXml OUT

IF @return = 0 PRINT 'ResponseXML... OK'

-- Extraindo uma parte específica da resposta

EXEC @return = sp_OAMethod @responseXml, 'Text', @text OUT

IF @return = 0 PRINT 'Text... OK'

-- Recuperando a temperatura

SET @xml = CAST(@text AS XML)

SELECT @xml.value('(/CurrentWeather/Temperature)[1]', 'varchar(20)')

GO

Assim como qualquer outra feature, use-a com moderação, e esperamos que ela não venha mais existir em futuras versão do SQL Server já que pode ser facilmente e melhor substituida por SQL CLR.

Artigos relacionados:

Delegando permissões e acesso entre bancos de dados por meio de certificados no SQL Server

Delegando permissões e acesso entre bancos de dados por meio do Cross DB Ownership Chaining no SQL Server




Sobre o blog

Blog que há três anos trata de SQL Server, .NET Framework, PowerShell, soluções para problemas comuns e não tão comuns assim, informações sobre ferramentas diversas e o que vier na cabeça do MCT Paulo R. Pereira.

Twitter


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 345 outros seguidores

%d bloggers like this: