WebService e funções CLR no SQL Server

Boa noite pessoas!

Neste post de número 100, para demonstrar como acessar um WebService com CLR-SQL, desenvolvi um projeto simples. Talvez vocês encontrem na internet outros exemplos, mas creio que esta é a forma mais prática de trabalhar com CLR-SQL com WebService no Visual Studio.

Passo 1: Habilite o suporte à assembly no SQL Server (ver artigo).

EXEC sp_configure 'clr enabled', 1
RECONFIGURE
GO

Passo 2: Habilite a execução de assemblies External/Unsafe no seu banco de dados (ver artigo).

ALTER DATABASE TesteDb
SET TRUSTWORTHY ON
GO

Passo 3 e 4: Execute o Visual Studio 2005/2008 como administrador. Depois de criar sua solução CLR-SQL (ver artigo), adicione o projeto para seu WebService.

Passo 5: O projeto no exemplo será do tipo “ASP.NET Web Service Application”.

Passo 6: Adicione um WebService.

Passo 6.1: Existem outros tipos de WebService no Visual Studio, mas no momento, vamos utilizar um WebService comum.

Passo 6.2: Visualize o WebService no browser para evitar problemas nos próximos passos.

E como resultado:

Passo 7: Voltando ao Visual Studio, adicione uma referência do WebService ao projeto CLR-SQL.

Passo 7.1: Visto que estamos em um ambiente de desenvolvimento, podemos utilizar um WebService que esteja vinculado a esta solução, mas nada impede de referenciado um WebService externo.

Passo 7.2: Identifique o WebService que você deseja referenciar.

Passo 7.3: Nomeie a referência do seu WebService.

Passo 8: Adicionar uma função ao projeto CLR-SQL (ver artigo).

Passo 9: Na função, crie uma instância do objeto WebService e chame o método desejado.

public partial class UserDefinedFunctions
{
  [Microsoft.SqlServer.Server.SqlFunction]
  public static SqlString Test()
  {
    var ws = new SqlClrProject.WSProjectTest.Test();
    return ws.HelloWorld();

  }
};

Passo 10: Agora será necessário alterar algumas configurações do projeto CLR-SQL:

Passo 10.1: Habilitar o nível de permissão “External” ao assembly:

Passo 10.2: Por ser utilizado um WebService (um objeto XML serializado), será necessário que um assembly adicional seja gerado pelo projeto. Basta alterar a opção “Generate Serialization Assembly” para “ON”.

Após o primeiro “Build” da solução, habilitando a opção “Show All Files” da “Solution Explorer”, você poderá encontrar o assembly adicional gerado pelo Visual Studio.

clip_image030[5]

Obs.: Não se esqueça deste assembly ao publicar o projeto CLR-SQL no servidor.

Artifício: No script de teste (ver artigo), será necessário adicionar este assembly adicional no SQL Server, assim você poderá utilizar como modelo o seguinte script:

--Criando o assembly adicional:
CREATE ASSEMBLY [SqlClrProject.XmlSerializers]
AUTHORIZATION [dbo]
FROM 'D:\SqlClrProject\SqlClrProject\bin\Debug\SqlClrProject.XmlSerializers.dll'
-- Executando a função:
PRINT dbo.Test()
-- Destruindo o assembly adicional:
DROP ASSEMBLY [SqlClrProject.XmlSerializers]

Algumas vezes, projetos WebService e CLR-SQL no Visual Studio não se dão muito bem, mas é um ótimo recurso que o SQL Server 2005/2008 permite.

6 pensamentos sobre “WebService e funções CLR no SQL Server

  1. Pingback: Publicando Assemblies CLR no SQL Server pelo Visual Studio « Sql From Hell.com

  2. Pingback: O que mudou nos projetos SQL CLR do Visual Studio 2010? « Sql From Hell.com

  3. Boa tarde,
    Antes de mais parabens pelo trabalho, os seus posts tem ajudado imenso.
    Contudo, tenho o problema assim que tento executar uma função CLR em SQL. Dentro da função tenho uma chamada a um WebService, e quando tento correr em SQL, me dá o seguinte erro:

    There was an error in serializing body of message : ‘Cannot load dynamically generated serialization assembly. In some hosting environments assembly load functionality is restricted, consider using pre-generated serializer. Please see inner exception for more information.’. Please see InnerException for more details.

    Eu adicionei a assembly XmlSerializers manualemente, e mesmo assim nao funciona.
    Pode ajudar?
    Muito obg

  4. Pingback: Trabalhando com SQL CLR – Resumo « SQL From Hell.com

  5. Pingback: Trabalhando com SQL CLR – Resumo « SQL From Hell.com

Deixe uma resposta

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

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s