none
CLR SQL Server 2005 RRS feed

  • Pregunta

  • Buenas colegas.

    Tengo un dilema con respecto a la funcionalidad CLR en SQL Server 2005.

    Estoy desarrollando una aplicación de servicios que utiliza conexiones remotas a servidores de algunos proveedores; cada proveedor me facilita un dll para acceder a su servidor.

    ...Entonces desarrolle una aplicación en .NET que realiza una parametrización y dinámicamente escoge el proveedor, y tipo de servicio que el cliente necesita. Busca en la BD el ensamblado, la ruta, la clase, el método y los parámetros, ya con esta información arma una llamada al método le envía los valores según sus parámetros y recibe la respuesta del servidor remoto.

    Todo esto funciona perfectamente desde una IU que diseñé para ir depurando la aplicación, pero la idea es que ésta aplicación sea compilada como una librería (DLL) y se llame mediante un Store Procedure.

    Así que he compilado la aplicación, y creado el assembly en SQL, que ha agregado automáticamente las referencias que mi código necesita (al menos eso creo).

    Las instrucciones que he utilizado son las siguientes:

    EXEC sp_configure 'clr enabled', 1
    RECONFIGURE
    GO
    
    ALTER DATABASE myDB SET TRUSTWORTHY ON
    GO
    
    CREATE ASSEMBLY Autorizaciones FROM 'C:\Ensamblados\AutorizacionesSOA.dll' WITH PERMISSION_SET = UNSAFE
    GO
    
    
    

    Así como su respectiva Función para invocar el ensamblado, esta función es llamada desde un SP.

    Al crear el assembly, automaticamente se han agregado las siguientes librerías:

    Accessibility
    AD
    ADODB
    Autorizaciones
    AutorizacionesLN
    System.Core
    System.Drawing
    System.Runtime.Serialization.Formatters.Soap
    System.Windows.Forms
    System.Xml.Linq
    UTILERIASEN
    

    Algunas las uso como referencia en el dll que he hecho, otras no las utilizo, al menos no las he referenciado.

    Lo cierto del caso es que cuando ejecuto el SP que es el que me debería de realizar el proceso, me devuelve una Excepción y por más información que he buscado, no logro dar con la solución del problema.

    La excepción se produce cuando en el DLL que he hecho se llama al método LoadFile de la clase Reflection.Assembly. Aquí está la excepción:

    Msg 6522, Level 16, State 1, Procedure sp_solicitud_servicio, Line 150
    A .NET Framework error occurred during execution of user-defined routine or aggregate "Autorizacion": 
    System.IO.FileLoadException: LoadFrom(), LoadFile(), Load(byte[]) and LoadModule() have been disabled by the host.
    System.IO.FileLoadException: 
      at ATS.AutorizacionesSOA.Servicio.AutorizacionSOA.Autorizacion(Int32 pvnConsecutivo, Int32 pvnDetTipServicio, String pvcTipoServicio, String pvcUserDB, String pvcPassUserDB, String pvcBDName, String pvcServerName)
    .
    

    Como siempre, muchas gracias. 

    miércoles, 20 de octubre de 2010 20:40

Respuestas

  • El error FileLoadException se produce cuando no se consigue cargar un ensamblado de .Net. Puede ser que tus DLLs no las tengas copiadas en una ubicacion donde pueda encontrarlas el proceso de Fusion. Para que no haya dudas, prueba a instalarlas en el GAC, y asi sabes que se tienen que poder cargar con toda seguridad.
    jueves, 21 de octubre de 2010 6:10