viernes, 19 de junio de 2020

AppSettings from SQL Server CLR

Necesitamos acceder a parámetros de configuración (Ej: string conección, credenciales y path archivos de log) desde una class library publicada en un SQL Serber CLR.

Una class library (c#) no tiene acceso por si misma a un archivo de configuración.
Cuando se publica una DLL en el CLR del SQL Server, éste levanta la DLL en su memoria interna y se desconoce la ubicación física de la misma.
También hay que considerar la implementación en un cluster de servidores SQL Server.

Las opciones analizadas son las siguientes:
  1. Especificar un recurso compartido "pre definido" donde se encuentre el archivo de configuración.
  2. Obtener parámetros consumiendo un servicio API externo "pre definido" por código. Para nuestro caso en particular sería un nuevo método dentro la "Analytics_WebApi" existente.
  3. Utilizar archivo de configuración propio del SQL Server (sqlservr.exe.config).
  4. Obtener parámetros consumiendo una función o SP del SQL Server. Desde CLR se tiene acceso a la instancia de SQL Server donde está alojado. A partir de allí se podría definir una función en la master o una base de datos "pre definida" con los parámetros necesarios. 
Las opciones 3 y 4 sólo son aplicables para el caso en que la clase sea instanciada dentro del entorno del SQL Server.

Conclusiones:
La opción 1 parece ser la más fácil de implementar, y a la vez compatible con la publicación de las DLLs al momento de levantar los assemblies dentro del SQL Server.
Sin embargo, la opción 2 permite una implementación transparente en ambientes de nube y/o contenedores, definiendo el acceso a la API como un DNS Alias.


Referencias:

Does SQL Server CLR Integration support configuration files?
Muy buen artículo que propone utilizar archivo de configuración del SQL Server (sqlservr.exe.config).

HOW TO USE A CONFIGURATION (.CONFIG) FILE IN SQL SERVER CLR
Se explica cómo obtener el path y acceder al archivo de configuración del SQL Server.

No hay comentarios:

Publicar un comentario