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


1 Resposta para “Acessando dados de Web Service com Ole Automation Procedures”



Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s


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

  • @edvaldocastro02 Segundo meu cliente: 1 eternidade = 2 segundos... No seu caso, vc chegou a ~1800 eternidades? 5 hours ago
  • [BLOG] Identificando consultas demoradas com o SQL Server Profiler http://t.co/joU301sH 6 hours ago
  • E por milagre: Paulo R. Pereira Jr. iniciará o Mestrado em Administração na PUC-PR!! 7 hours ago
  • Gmail esta com Alzheimer... Termino de ler as mensagens recentes, cinco minutos depois elas voltam como não lidas... Já é a 5x hoje... 7 hours ago
  • E novamente um webproxy acaba com meu dia... Build! Let's try again... build! again... build! again... (cc @WilliamPietro, @VitorBitner ) 1 day ago

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Join 491 other followers