Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
documentacion_tecnica:componentes:conexiones [2018/02/22 10:27]
user creado
documentacion_tecnica:componentes:conexiones [2018/02/23 07:04] (actual)
user [¿Que es el archivo de configuración?]
Línea 1: Línea 1:
 ===== Fábrica de Conexiones ===== ===== Fábrica de Conexiones =====
  
-Se encarga ​de administrar y gestionar ​las conexiones de las aplicaciones ​en los diferentes ambientes.+La fábrica de conexiones es un mecanismo para facilitar la conexión hacia los diferentes repositorios que tenemos, independientemente de que tipo de repositorio sea, la fábrica puede proveernos la conexión que necesitamos. 
 + 
 +====Entorno Web==== 
 + 
 +Cuando una aplicación web se inicia, se ejecuta un método llamado Application_Start el cual se encuentra en la clase Global del archivo global.asax,​ en este método se realizan las inicializaciones de diferentes componentes como lo son ruteos de mvc, ruteos de webApi, áreas de mvc, entre otros. 
 + 
 +Se realiza la inicialización del la webApi por medio de la instrucción:​ 
 +<code csharp>​GlobalConfiguration.Configure(WebApiConfig.Register);</​code>​ 
 +En el método Register de la clase WebApiConfig,​ se manda a inicializar los contenedores de Unity con la instrucción:​ 
 +<code csharp>​Bootstrapper.Initialise(config);</​code>​ 
 +Dentro del método Initialise de la clase Bootstrapper,​ se realiza la inicialización de la fábrica con la siguiente instrucción 
 +<code csharp>​Utilerias.ContextoSD.Contenedor.Resolve<​IConexion>​().Inicializar();</​code>​ 
 +De esta manera se inicializa la fábrica de conexiones. 
 + 
 +====¿Que sucede durante la inicialización?​==== 
 + 
 +Para determinar que sucede, veamos el siguiente diagrama de secuencia donde: 
 + 
 +|Unity|**U**| 
 +|ConexionesBE|**BE**| 
 +|ConexionDS|**DS**| 
 +|ConexionesConfigurationSectionHandler|**CSH**| 
 +|Almacen de Certificados|**Store**| 
 + 
 +Diagrama de Secuencia de Fabrica de Conexiones. 
 + 
 +<​seqdia>​ 
 +U->​+BE:​Resolve<​IConexion>​() 
 +BE->​+DS:​new() 
 +DS->​+CSH:​Instancia 
 +CSH->​CSH:​Leer archivo \n de configuración 
 +activate CSH 
 +deactivate CSH 
 +CSH->​*+Store:​Obtener certificado \n de encriptación 
 +Store->​-CSH:​Devuele el certificado 
 +CSH->​CSH:​Descriptar la configuración \n del archivo 
 +activate CSH 
 +deactivate CSH 
 +CSH->​-DS:​Devuelve la configuración 
 +DS->-BE:  
 +BE->-U:  
 +BE->BE: Inicializar() 
 +activate BE 
 +BE->BE: CargarConfiguracion() 
 +activate BE 
 +BE->+DS: ConsultarConexión(Mongo) 
 +DS->-BE: Conexión para Mongo 
 +BE->BE: Preparar o actualizar \n conexiones 
 +deactivate BE 
 +</​seqdia>​ 
 + 
 +  - Unity resuelve a **IConexion** con **ConexionesBE**. 
 +  - Al resolverla crea una instancia de **ConexionesBE**. 
 +  - Al crear la instancia de **ConexionesBE** se crea una instancia de **ConexionDS**. 
 +  - **ConexionDS** llama a una propiedad estática (singleton) de **ConexionesConfigurationSectionHandler**. 
 +  - **ConexionesConfigurationSectionHandler** lee el archivo de configuración de conexiones. 
 +  - **ConexionesConfigurationSectionHandler** va por el certificado de encriptación al Almacen de Certificados. 
 +  - **ConexionesConfigurationSectionHandler** desencripta la configuración con el certificado. 
 +  - **ConexionesConfigurationSectionHandler** devuelve la configuración de la conexión a **ConexionDS**. 
 +  - Con esto se termina de instanciar tanto **ConexionDS**,​ como **ConexionesBE**. 
 +  - **ConexionesBE** ejecuta el método Inicializar. 
 +  - En dicho método se manda a ejecutar CargarConfiguración. 
 +  - Se manda a llamar a **ConexionDS** el cual obtiene la conexión de Mongo por medio del método ConsultarConexion. 
 +  - Se cargan o se actualizan ​las conexiones
 +  - Termina la inicialización ​de la fábrica de conexiones. 
 + 
 +====¿Que es el archivo de configuración?​==== 
 + 
 +El archivo de configuración es un archivo XML el cual contiene la configuración para conectarse al servidor de conexiones, tambien define el ambiente al cual se quiere conectar. 
 + 
 +El archivo contiene la siguiente estructura:​ 
 + 
 +<code xml> 
 +<​conexiones ambiente="​desarrolloUno">​Cadena Encriptada</​conexiones>​ 
 +</​code>​ 
 +Donde el ambiente define el conjunto de conexiones ​las cuales podremos utilizar. 
 + 
 +La Cadena Encriptada es un texto en Base64 encriptado a travez de un certificado SSL de 2048 bits y lo que contiene es una estructura XML con la siguiente definición:​ 
 + 
 +<code xml> 
 +<?xml version="​1.0"​ encoding="​utf-8"?>​ 
 +<​conexiones ambiente="​desarrolloUno">​ 
 +  <​conexion>​ 
 +    <​Value>​Cadena de conexion del Servidor de Conexiones</​Value>​ 
 +  </​conexion>​ 
 +  <​credencial usuario="​nombreUsuario"​ contrasena="​Contraseña"​ /> 
 +</​conexiones>​ 
 +</​code>​ 
 + 
 +Donde la conexión es la cadena de conexión del servidor que contiene todas las conexiones. 
 + 
 +Credencial es un mecanismo para validar que esa conexión puede consumir el ambiente especificado. 
 + 
 +Este archivo de conexion utiliza el mecanismo de configuración de .Net, por lo tanto debe especificarse en la sección de configuración de los archivos de configuracion de .Net, y posteriormente definir el elemento haciendo referencia al archivo de configuracion de conexiones, es decir, en el app.config, web.config o machine.config se debe agregar la siguiente línea en la sección **configuration/​configSections**:​ 
 + 
 +<code xml> 
 +<section name="​conexiones"​ type="​SD.Conexiones.ConexionesConfigurationSectionHandler,​ SD"/>​ 
 +</​code>​ 
 + 
 +Despues en cualquier parte de la sección **configuration** agregar la siguiente línea: 
 + 
 +<code xml> 
 +<​conexiones configSource="​conexiones.config"></​conexiones>​ 
 +</​code>​ 
 + 
 +Para mas información sobre la jerarquía de las configuraciones revisar [[https://​lawiki-sd.azurewebsites.net/​doku.php/​cap:​dotnet:​config|Módelo de Configuración de DotNet]].