Diante das grandes necessidades que temos hoje de integração de dados e interatividade, muitas vezes se faz necessária uma consolidação de dados mais centralizada, e eliminar recursos intermediários como agentes de processamento é uma grande pedida para ganharmos em qualidade, desempenho e melhoria no tempo para implementação de soluções assim acessar serviços diretamente do banco de dados é um grande recurso que ajuda em integrações mais rápidas.

Para iniciarmos primeiro é necessário criar um projeto do tipo SQL Server Project para isso abra o Visual Studio File > New > Project.

Nomeie com o nome mais adequado a necessidade no nosso caso chamamos o projeto de GPPMiddleware, por se tratar de o início de uma camada de chamadas de webservices dentro do banco.

Depois de criado o projeto, clique com o botão direito do mouse sobre o projeto e selecione Add > New Item. Algumas opções são possíveis dentro no nosso caso iremos criar uma Stored Procedure, mais nada impede que se possa criar uma Trigger, UDF ou outro tipo de objeto do banco.

Essa é a estrutura básica de uma procedure CLR, agora iremos codificar a lógica de negócio envolvida no processo.

O objetivo dessa procedure será consultar os dados de uma unidade de material no SAP utilizando um serviço, retornar esses dados para e exibi-los para o usuário.

Vamos agora adicionar a referencia ao serviço, clique com o botão direito do mouse sobre o projeto e selecione Add Web Reference, uma caixa será exibida para que seja informado o endereço do serviço.

Informe o endereço do serviço no campo URL pressione o botão GO, nomeie a referencia com o nome adequado no campo Web reference name e clique em Add Reference.

Depois de adicionada a referência, precisamos codificar o acesso e o que deverá ser feito, no nosso caso o programa irá consultar os dados e retornar para o usuário os dados referentes a unidade de material do SAP.

Depois de codificada a procedure chegamos numa parte que precisa de muito cuidado para que a tudo possa ser corretamente executado e instalado, primeiro vamos às configurações do projeto, clique com o botão direito do mouse sobre o projeto e selecione Properties serão selecione a aba Build, na seção Output selecione a opção On no campo Generate serialization assembly. Essa configuração se faz necessária para permitir criar um outro assembly responsável pela serialização dos objetos de comunicação entre o banco e o serviço.

Depois disso clique na aba Signing, na seção Sign the assembly selecione a opção <New…>, nomeie o arquivo que irá conter as definições de Strong Name do nosso projeto e caso queira coloque uma senha no arquivo.

Deixe desmarcada a opção Delay sign only. Depois disso selecione a aba Database, selecione a opção Unsafe no campo Permission Level, salve as opções de projeto.

Depois desses passos de configuração precisamos configurar o banco de dados e o SQL Server para aceitar procedures CLR:

sp_configure 'clr enabled', 1
GO
reconfigure
GO

Altere o banco de dados para trusthworthy

alter database GPPMiddleware set trustworthy on

Depois disso é necessário criar dois scripts responsáveis por registrar o assembly de serialização no banco, para isso acesse a pasta onde se encontra os fontes do projeto, La crie dois arquivos chamados Predeployscript.sql e Postdeployscript.sql, dentro de Predeployscript.sql escreva a seguinte sentença:

IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'GPPMiddleware.XmlSerializers')
DROP ASSEMBLY [GPPMiddleware.XmlSerializers]

No arquivo Postdeployscript.sql escreva a seguinte sentença:

CREATE ASSEMBLY [GPPMiddleware.XmlSerializers] from
'<Pasta do Projeto>BinDebugGPPMiddleware.XmlSerializers.dll'
WITH permission_set = SAFE

Depois disso é só dar um build e um deploy no projeto, depois é só chamar a procedure dentro do banco como qualquer outra.

Observe o resultado da chamada.