none
CREATE ASSEMBLY Erro

    Question

  • 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.

     

    Monday, January 31, 2011 5:49 PM

Answers

  • 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
    Monday, January 31, 2011 6:15 PM
    Moderator

  • 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
    Monday, January 31, 2011 7:15 PM
    Moderator

All replies

  • 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
    Monday, January 31, 2011 6:15 PM
    Moderator
  • 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.

     

     

    Monday, January 31, 2011 6:34 PM
  • 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

    Monday, January 31, 2011 6:52 PM

  • 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
    Monday, January 31, 2011 7:15 PM
    Moderator
  • 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.

    Monday, January 31, 2011 7:24 PM