Usuário com melhor resposta
CREATE ASSEMBLY Erro

Pergunta
-
Boas galera,
Estou com um problema ao tentar chamar um WCF service em dentro de uma Trigger CLR. Estive googlando um pouco e vi o seguinte post:
http://www.codeproject.com/KB/database/WCFFromSQL.aspx?msg=2320155
Porem quando fui tentar executar os seguintes comandos recebi uma mensagem de erro:
Comandos
CREATE ASSEMBLY
SMDiagnostics from
'C:\Windows\Microsoft.NET\Framework\v3.0\Windows
Communication Foundation\SMDiagnostics.dll'
with permission_set = UNSAFE
GO
CREATE ASSEMBLY
[System.IdentityModel] from
'C:\Program Files\Reference Assemblies\Microsoft\
Framework\v3.0\System.IdentityModel.dll'
with permission_set = UNSAFE
GO
CREATE ASSEMBLY
[System.IdentityModel.Selectors] from
'C:\Program Files\Reference Assemblies\Microsoft\
Framework\v3.0\System.IdentityModel.Selectors.dll'
with permission_set = UNSAFE
GO
CREATE ASSEMBLY -- this will add service modal
[Microsoft.Transactions.Bridge] from
'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication
Foundation\Microsoft.Transactions.Bridge.dll'
with permission_set = UNSAFE
GO
Mensagem de erro
Msg 6501, Level 16, State 7, Line 1
CREATE ASSEMBLY failed because it could not open the physical file "C:\Windows\Microsoft.NET\Framework\v3.0\Windows
Communication Foundation\SMDiagnostics.dll": 123(A sintaxe do nome do arquivo, pasta ou nome do volume está incorreta.).
Eu sei que isso parece ridiculo, mas eu verifiquei e os arquivos estavam no diretorio no servidor, tanto é que consegui registrar os outros assemblies.
Alguma ideia de onde possa estar o erro??
Caso tenha postado na categoria errada, por favor me perdoem.
Respostas
-
Olá,
1. Dê uma olhada na pasta "C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\" e veja as permissões dela. O usuário que você está usando para se conectar ao SQL Server e executar estes comando CREATE ASSEMBLY tem permissão de leitura nesta pasta?
2. Outros assemblies que estão nesta mesma pasta, funcionam qdo vc tenta registrá-los?3. Pergunta básica, mas é bom reforçar: o arquvo SMdiagnostics.dll realmente está nesta pasta?
4. Já tentou, como teste, registrar APENAS esta assembly? A msg é a mesma?
5. A sintaxe está certinha, do jeito que você postou acima, certo?
CREATE ASSEMBLY [SMDiagnostics]
FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMDiagnostics.dll'
WITH PERMISSION_SET = UNSAFE;
Um abraço,Raul Santos Neto
http://raulsantosneto.wordpress.com- Marcado como Resposta Daniel T Torres segunda-feira, 31 de janeiro de 2011 19:24
-
Hmmm.. tenho impressão que é algo relacionado a vc tentar registrar uma DLL do framework 4.0 a partir do SQL, que usa um framework mais antigo.. que SQL Server vc está usando aí?De qualquer maneira, eu rodei aqui apontando para a v2 e funcionou:
--/ ALTER DATABASE MASTER SET TRUSTWORTHY ON
CREATE ASSEMBLY [SMDiagnostics]
FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMDiagnostics.dll'
WITH PERMISSION_SET = UNSAFE;CREATE ASSEMBLY [System.Web]
FROM 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.dll'
WITH PERMISSION_SET = UNSAFE;CREATE ASSEMBLY [System.IdentityModel.Selectors]
FROM 'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.IdentityModel.dll'
WITH PERMISSION_SET = UNSAFE;Você realmente precisa de algo especial que tenha nessa versão da V4??
Preciso dar uma olhada por aí, mas creio que seja incompatibilidade.. vou olhar e se achar algo, te aviso.. mas se puder apontando pra versão anterior e fazer um teste, seria bacana pra tirar a dúvida!
Um abraço,
Raul Santos Neto
http://raulsantosneto.wordpress.com- Marcado como Resposta Daniel T Torres segunda-feira, 31 de janeiro de 2011 19:24
Todas as Respostas
-
Olá,
1. Dê uma olhada na pasta "C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\" e veja as permissões dela. O usuário que você está usando para se conectar ao SQL Server e executar estes comando CREATE ASSEMBLY tem permissão de leitura nesta pasta?
2. Outros assemblies que estão nesta mesma pasta, funcionam qdo vc tenta registrá-los?3. Pergunta básica, mas é bom reforçar: o arquvo SMdiagnostics.dll realmente está nesta pasta?
4. Já tentou, como teste, registrar APENAS esta assembly? A msg é a mesma?
5. A sintaxe está certinha, do jeito que você postou acima, certo?
CREATE ASSEMBLY [SMDiagnostics]
FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMDiagnostics.dll'
WITH PERMISSION_SET = UNSAFE;
Um abraço,Raul Santos Neto
http://raulsantosneto.wordpress.com- Marcado como Resposta Daniel T Torres segunda-feira, 31 de janeiro de 2011 19:24
-
Boas Raul,
Vamos as respostas:
1- Vou verificar isso e ja posto o feedback.
2- Não. Todos que estão sob a v3.0 naão consigo registrar.
3- Sim, o arquivo esta no diretorio.
4 - Sim, o mesmo erro.
5- Sim, a sintaxe ta do mesmo jeito
Eu fiz um teste alterando da versão 3.0 pra o diretorio da versão 4 do framework e me deu o seguinte erro:
Msg 6218, Level 16, State 3, Line 1
CREATE ASSEMBLY for assembly 'SMDiagnostics' failed because assembly 'SMDiagnostics' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
Obrigado pela reposta.
-
Boas Raul,
De fato a questão da permissão aparentemente funfou pro caso daquele assembly.
Para outros dois assemblies, nao consegui registra-los e obtive a seguinte mensagem de erro:
Msg 6218, Level 16, State 3, Line 1
CREATE ASSEMBLY for assembly 'System.IdentityModel' failed because assembly 'System.IdentityModel' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
o comando que eu executei foi o seguinte:
CREATE ASSEMBLY
[System.IdentityModel] from
'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\System.IdentityModel.dll'
with permission_set = UNSAFE
GO
Alguma ideia a mais?
Thanks
-
Hmmm.. tenho impressão que é algo relacionado a vc tentar registrar uma DLL do framework 4.0 a partir do SQL, que usa um framework mais antigo.. que SQL Server vc está usando aí?De qualquer maneira, eu rodei aqui apontando para a v2 e funcionou:
--/ ALTER DATABASE MASTER SET TRUSTWORTHY ON
CREATE ASSEMBLY [SMDiagnostics]
FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMDiagnostics.dll'
WITH PERMISSION_SET = UNSAFE;CREATE ASSEMBLY [System.Web]
FROM 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.dll'
WITH PERMISSION_SET = UNSAFE;CREATE ASSEMBLY [System.IdentityModel.Selectors]
FROM 'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.IdentityModel.dll'
WITH PERMISSION_SET = UNSAFE;Você realmente precisa de algo especial que tenha nessa versão da V4??
Preciso dar uma olhada por aí, mas creio que seja incompatibilidade.. vou olhar e se achar algo, te aviso.. mas se puder apontando pra versão anterior e fazer um teste, seria bacana pra tirar a dúvida!
Um abraço,
Raul Santos Neto
http://raulsantosneto.wordpress.com- Marcado como Resposta Daniel T Torres segunda-feira, 31 de janeiro de 2011 19:24
-
Boas Raul,
Cara,muito obrigado pela ajuda, de fato consegui registrar os assemblies na versão mais antiga. Desculpe minha faltta de experiencia, é a primeira vez que crio uma trigger CLR que necessitava desses comandos par poder ser registrada.
Muito Obrigado.