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
GOPasso 2: Habilite a execução de assemblies External/Unsafe no seu banco de dados (ver artigo).
ALTER DATABASE TesteDb
SET TRUSTWORTHY ON
GOPasso 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.
![]()
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.
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
Boa noite Nelson, me envie por email (pauloroberto (at) sqlfromhell.com) com o código que você esta tentando executar para eu dar uma olhada e tentar simular o erro.