public override void OnActionExecuting(ActionExecutingContext filterContext) { // Extraer el subdominio de la URL de la solicitud string host = filterContext.HttpContext.Request.Headers["Host"]; Uri url = filterContext.HttpContext.Request.Url; string[] hostPartido = host.Split('.'); #if DEBUG #region Simular el subdominio utilizando el parámetro SubdominioDepuracion // Sólo en configuración de depuración: si el host no tiene subdominio (típico en // depuración) se inserta al principio del array hostPartido el subdominio de la aplicación de la // sesión, o en su defecto el subdominio por defecto almacenado en la tabla Parámetros de la base // de datos con la clave "SubdominioDepuracion". Aplicacion apl = (Aplicacion)HttpContext.Current.Session["Aplicacion"]; if (apl != null) { hostPartido = new[] { apl.SubDominio, hostPartido[0] }; } else if (hostPartido.Length < 2) { var dbcontext = HttpContext.Current.GetOwinContext().Get <IPushNewsUnitOfWork>(); IParametrosServicio srvParametros = new ParametrosServicio(dbcontext /*, null*/); Parametro subdominioDepuracion = srvParametros.GetByName("SubdominioDepuracion"); if (subdominioDepuracion != null) { hostPartido = new[] { subdominioDepuracion.Valor, hostPartido[0] }; } } #endregion #endif // Si el host no contiene subdominio, redirigir a la página comercial. if (hostPartido.Length < 2) { log.Info($"Solicitud sin subdominio. Redirigir a la web comercial. Host de la solicitud: {host}"); filterContext.Result = new RedirectResult("http://www.pushnews.com"); } else { string subdominio = hostPartido[0]; var dbcontext = HttpContext.Current.GetOwinContext().Get <IPushNewsUnitOfWork>(); IParametrosServicio srvParametros = new ParametrosServicio(dbcontext /*, null*/); Parametro parametroSubdominioGenerico = srvParametros.GetByName("SubdominioGenerico"); string subdominioGenerico = parametroSubdominioGenerico?.Valor ?? ""; if (subdominio == subdominioGenerico) { // Si se está accediendo con el subdominio genérico, no se puede dar acceso a la parte // pública (webapp). Salvo que se solicite una url de la parte privada (backend) cuya // ruta local empieza por "/backend", redirigirá a la web comercial. if (!url.LocalPath.StartsWith("/backend")) { log.Info($"Solicitud a subdominio genérico fuera del backend. Redirigir a la web comercial. Url de la solicitud: {url.ToString()}"); filterContext.Result = new RedirectResult("http://www.pushnews.com"); } } else { /* 14/3/2016 EAR * Para garantizar que los cambios realizados en la versión, el tipo o el cloudkey de la * aplicación afecten a las sesiones abiertas, recargamos el objeto aplicación a la * sesión en cada solicitud. Esto se puede quitar para producción si se quiere optimizar. * eliminando los comentarios de la declaración de aplicacion (obtenida de la sesión) y * del bloque condicional siguiente). */ // Si hay un objeto Aplicacion almacenado en la sesión y el subdominio es el mismo, no // hay que hacer nada más. Si por el contrario no hay objeto Aplicacion en la sesión, se // obtiene el objeto Aplicacion correspondiente al subdominio y se almacena en la sesíón. Aplicacion aplicacion = (Aplicacion)HttpContext.Current.Session["Aplicacion"]; if (aplicacion == null) { // Obtener la aplicación asociada al subdominio IAplicacionesServicio srvAplicaciones = new AplicacionesServicio(dbcontext); aplicacion = srvAplicaciones.GetBySubdomain(subdominio); // Si no se encuentra una aplicación asociada al subdominio, redirigir a la página comercial. if (aplicacion == null) { log.Info($"El subdominio no corresponde a ninguna aplicación. Subdominio de la solicitud: {subdominio}"); filterContext.Result = new RedirectResult("http://www.pushnews.com"); } else { // Guardar el objeto aplicación en la sesión HttpContext.Current.Session.Add("Aplicacion", aplicacion); HttpContext.Current.Session.Add("Caracteristicas", aplicacion.Caracteristicas .Where(c => c.Activo) .Select(c => (Dominio.Enums.AplicacionCaracteristica)c.AplicacionCaracteristicaID)); } } } } base.OnActionExecuting(filterContext); }
static void Main(string[] args) { string archivoPorProcesar = null; if (args.Length > 0) { archivoPorProcesar = args [0]; Console.WriteLine(archivoPorProcesar); } var appSettings = new AppSettings(); var fechaRadicacionInicial = appSettings.Get <DateTime>("FechaRadicacionInicial", new DateTime(2015, 1, 7)); var fechaRadicacionFinal = appSettings.Get <DateTime>("FechaRadicacionFinal", DateTime.Today); var urlBaseVivanto = appSettings.Get <string>("UrlBaseVivanto", "http://190.60.70.149:82"); var varConexionBD = appSettings.Get <string>("ConexionBD", "APP_CONEXION_IRD"); var varUsuarioVivanto = appSettings.Get <string>("UsuarioVivanto", "APP_USUARIO_VIVANTO"); var varClaveVivanto = appSettings.Get <string>("ClaveVivanto", "APP_CLAVE_VIVANTO"); var conexionBD = Environment.GetEnvironmentVariable(varConexionBD); var usuarioVivanto = Environment.GetEnvironmentVariable(varUsuarioVivanto); var claveVivanto = Environment.GetEnvironmentVariable(varClaveVivanto); Console.WriteLine(fechaRadicacionInicial); Console.WriteLine(fechaRadicacionFinal); Console.WriteLine(urlBaseVivanto); Console.WriteLine(varConexionBD); Console.WriteLine(varUsuarioVivanto); Console.WriteLine(varClaveVivanto); Console.WriteLine(conexionBD); Console.WriteLine(usuarioVivanto); Console.WriteLine(claveVivanto); var login = new LoginVivanto { Usuario = usuarioVivanto, Clave = claveVivanto }; var par = new ParametrosServicio() { UrlBase = urlBaseVivanto }; var parProcesamiento = new ParametrosProcesamiento() { FechaRadicacionInicial = fechaRadicacionInicial, FechaRadicacionFinal = fechaRadicacionFinal }; using (IConexionVivanto cliente = new ConexionVivanto(par, login)) { var dbfactory = new OrmLiteConnectionFactory(conexionBD, SqlServerDialect.Provider); var dbcliente = new ConexionIRDCOL(dbfactory); cliente.IniciarSesion(); var proc = new Procesamiento(cliente, dbcliente, parProcesamiento); var np = proc.Iniciar(archivoPorProcesar); Console.WriteLine("Listo primera fase"); Console.WriteLine("esperando 5 segundos para iniciar con los no procesados"); System.Threading.Thread.Sleep(5 * 1000); Console.WriteLine("Iniciando ahora con los no procesados..."); //proc = new Procesamiento (cliente, dbcliente, parProcesamiento); proc.Iniciar(np); cliente.CerrarSession(); } return; }