Implementacion RabbitMQ

This commit is contained in:
Luis Martinez 2023-03-21 18:55:21 -05:00
parent 0995333044
commit f0050c4898
9 changed files with 404 additions and 177 deletions

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Metadata;
@ -27,13 +28,29 @@ namespace MSAdminUsuarios.Context
{ {
if (!optionsBuilder.IsConfigured) if (!optionsBuilder.IsConfigured)
{ {
//! Requerido! para instanciar ModelContext sin injeccion
var config = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.Development.json", optional: true, reloadOnChange: true)
.Build();
var ConString = config.GetSection("ConnectionStrings:ConString").Get<string>();
optionsBuilder.UseOracle(ConString);
} }
} }
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
//modelBuilder.HasDefaultSchema("HIMSCAP"); // => AFQ if (Debugger.IsAttached)
modelBuilder.HasDefaultSchema("ADMIN"); {
modelBuilder.HasDefaultSchema("HIMSCAP"); // => AFQ
}
else
{
modelBuilder.HasDefaultSchema("ADMIN");
}
modelBuilder.Entity<MICROSERVICIO>(entity => modelBuilder.Entity<MICROSERVICIO>(entity =>
{ {

View File

@ -6,6 +6,7 @@ using System.Data.SqlClient;
using System.Linq; using System.Linq;
using System.Transactions; using System.Transactions;
using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage;
using RabbitMQ.Client;
namespace MSAdminUsuarios.Controllers namespace MSAdminUsuarios.Controllers
{ {
@ -14,14 +15,12 @@ namespace MSAdminUsuarios.Controllers
public class PerfilesPorUsuarioController : ControllerBase public class PerfilesPorUsuarioController : ControllerBase
{ {
private readonly ModelContext _context; private readonly ModelContext _context;
//private readonly IModel _channel;
//public PerfilesPorUsuarioController()
//{
//}
public PerfilesPorUsuarioController(ModelContext context) public PerfilesPorUsuarioController(ModelContext context)
{ {
_context = context; _context = context;
//_channel = channel;
} }
[HttpGet] [HttpGet]
@ -44,148 +43,87 @@ namespace MSAdminUsuarios.Controllers
[HttpPost] [HttpPost]
public async Task<IActionResult> GuardarPerfilesPorUsuario(PERFILPORUSUARIO[] guardar) public async Task<IActionResult> GuardarPerfilesPorUsuario(PERFILPORUSUARIO[] guardar)
{ {
using var dbContextTransaction = _context.Database.BeginTransaction(); using (var dbContextTransaction = _context.Database.BeginTransaction())
List<string> error = new(); //Inicializamos variable para guardar errores
try
{ {
//var error = await GuardarPerfiles(guardar, _context); List<string> error = new(); //Inicializamos variable para guardar errores
try
var count = 0;
// Se cambia a estado 0 todos los perfiles por usuario existentes
var existe_plfxusu = _context.PERFILESPORUSUARIOs.Where(x => x.BL_ESTADO_PFLXUSU == 1 && x.TX_FKDOC_USUMS == guardar[0].TX_FKDOC_USUMS).ToList();
foreach (var cu in existe_plfxusu)
{ {
cu.BL_ESTADO_PFLXUSU = 0; //var error = await GuardarPerfiles(guardar, _context);
_context.PERFILESPORUSUARIOs.Update(cu);
await _context.SaveChangesAsync();
}
foreach (var pxu in guardar) var count = 0;
{
count++;
//Se comprueba existencia de cada pxu en base de datos
var existe_pxu = (from dm in _context.PERFILESPORUSUARIOs
where dm.NU_FK_PFL == pxu.NU_FK_PFL
&& dm.TX_FKDOC_USUMS == pxu.TX_FKDOC_USUMS
select dm).ToList();
if (existe_pxu.Count() > 0) // Se cambia a estado 0 todos los perfiles por usuario existentes
var existe_plfxusu = _context.PERFILESPORUSUARIOs.Where(x => x.BL_ESTADO_PFLXUSU == 1 && x.TX_FKDOC_USUMS == guardar[0].TX_FKDOC_USUMS).ToList();
foreach (var cu in existe_plfxusu)
{ {
//Si existe activamos estado 1 del perfil cu.BL_ESTADO_PFLXUSU = 0;
existe_pxu[0].BL_ESTADO_PFLXUSU = 1; _context.PERFILESPORUSUARIOs.Update(cu);
_context.Update(existe_pxu[0]);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
continue;
} }
else
foreach (var pxu in guardar)
{ {
if (pxu == null) count++;
//Se comprueba existencia de cada pxu en base de datos
var existe_pxu = (from dm in _context.PERFILESPORUSUARIOs
where dm.NU_FK_PFL == pxu.NU_FK_PFL
&& dm.TX_FKDOC_USUMS == pxu.TX_FKDOC_USUMS
select dm).ToList();
if (existe_pxu.Count() > 0)
{ {
error.Add($"Perfil por usuario #{count} sin valores"); //Si existe activamos estado 1 del perfil
existe_pxu[0].BL_ESTADO_PFLXUSU = 1;
_context.Update(existe_pxu[0]);
await _context.SaveChangesAsync();
continue; continue;
} }
else
{
if (pxu == null)
{
error.Add($"Perfil por usuario #{count} sin valores");
continue;
}
pxu.BL_ESTADO_PFLXUSU = 1; pxu.BL_ESTADO_PFLXUSU = 1;
_context.PERFILESPORUSUARIOs.Add(pxu); _context.PERFILESPORUSUARIOs.Add(pxu);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
}
} }
dbContextTransaction.Commit();
List<string> all = new List<string>();
all.Add($"Total registros: {guardar.Count().ToString()}");
all.Add($"Exitosos: {(guardar.Count() - error.Count()).ToString()}");
all.Add($"Erroneos: {error.Count().ToString()}");
var flag_r = 0;
foreach (var r in error)
{
flag_r++;
all.Add($"Error #{flag_r}: {r}");
}
if (error.Count() > 0)
{
return Conflict(all.ToList());
}
return Ok();
} }
catch (Exception ex)
dbContextTransaction.Commit();
List<string> all = new List<string>();
all.Add($"Total registros: {guardar.Count().ToString()}");
all.Add($"Exitosos: {(guardar.Count() - error.Count()).ToString()}");
all.Add($"Erroneos: {error.Count().ToString()}");
var flag_r = 0;
foreach (var r in error)
{ {
flag_r++; //hacemos rollback si hay excepción
all.Add($"Error #{flag_r}: {r}"); dbContextTransaction.Rollback();
return BadRequest(ex.Message);
} }
if (error.Count() > 0) };
{
return Conflict(all.ToList());
}
return Ok();
}
catch (Exception ex)
{
//hacemos rollback si hay excepción
dbContextTransaction.Rollback();
return BadRequest(ex.Message);
}
} }
// Eliminado 19/03/23, RabbitMQ lo controla
//[ApiExplorerSettings(IgnoreApi = true)]
//[NonAction]
//public async Task<List<string>> GuardarPerfiles(PERFILPORUSUARIO[] guardar, ModelContext context)
//{
// //using var transactionScope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(60));
// try
// {
// List<string> error = new(); //Inicializamos variable para guardar errores
// var count = 0;
// // Se cambia a estado 0 todos los perfiles por usuario existentes
// var existe_plfxusu = context.PERFILESPORUSUARIOs.Where(x => x.BL_ESTADO_PFLXUSU == 1 && x.TX_FKDOC_USUMS == guardar[0].TX_FKDOC_USUMS).ToList();
// foreach (var cu in existe_plfxusu)
// {
// cu.BL_ESTADO_PFLXUSU = 0;
// context.PERFILESPORUSUARIOs.Update(cu);
// await context.SaveChangesAsync();
// }
// foreach (var pxu in guardar)
// {
// count++;
// //Se comprueba existencia de cada pxu en base de datos
// var existe_pxu = (from dm in context.PERFILESPORUSUARIOs
// where dm.NU_FK_PFL == pxu.NU_FK_PFL
// && dm.TX_FKDOC_USUMS == pxu.TX_FKDOC_USUMS
// select dm).ToList();
// if (existe_pxu.Count() > 0)
// {
// //Si existe activamos estado 1 del perfil
// existe_pxu[0].BL_ESTADO_PFLXUSU = 1;
// context.Update(existe_pxu[0]);
// await context.SaveChangesAsync();
// continue;
// }
// else
// {
// if (pxu == null)
// {
// error.Add($"Perfil por usuario #{count} sin valores");
// continue;
// }
// pxu.BL_ESTADO_PFLXUSU = 1;
// context.PERFILESPORUSUARIOs.Add(pxu);
// await context.SaveChangesAsync();
// }
// }
// //transactionScope.Complete();
// return error;
// }
// catch (Exception)
// {
// //transactionScope.Dispose();
// throw;
// }
//}
} }

View File

@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Components.Forms;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Linq; using System.Linq;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using RabbitMQ.Client;
namespace MSAdminUsuarios.Controllers namespace MSAdminUsuarios.Controllers
{ {
@ -16,11 +17,18 @@ namespace MSAdminUsuarios.Controllers
{ {
private readonly ModelContext _context; private readonly ModelContext _context;
private readonly Encripter _encript = new(); private readonly Encripter _encript = new();
//private readonly IModel _channel;
public UsuariosController(ModelContext context) public UsuariosController(ModelContext context)
{ {
_context = context; _context = context;
} }
//public UsuariosController(ModelContext context, IModel channel)
//{
// _context = context;
// _channel = channel;
//}
[HttpPost("UserBene")] [HttpPost("UserBene")]
public async Task<IActionResult> PostUserBeneficiario(string TX_IDENTIFICACION_AFIL) public async Task<IActionResult> PostUserBeneficiario(string TX_IDENTIFICACION_AFIL)
@ -65,13 +73,13 @@ namespace MSAdminUsuarios.Controllers
{ {
var consulta = _context.USUARIOSMs.FirstOrDefault(x => x.TX_PKDOC_USUMS == TX_PKDOC_USUMS); var consulta = _context.USUARIOSMs.FirstOrDefault(x => x.TX_PKDOC_USUMS == TX_PKDOC_USUMS);
var ininame = consulta.TX_PRIMERNOM_USUMS.ToCharArray(); var ininame = consulta.TX_PRIMERNOM_USUMS?.ToCharArray();
var iniape = consulta.TX_PRIMERAPELL_USUMS.ToCharArray(); var iniape = consulta.TX_PRIMERAPELL_USUMS?.ToCharArray();
NameObject nombreObjeto = new NameObject() NameObject nombreObjeto = new NameObject()
{ {
iniciales = ininame[0].ToString() + iniape[0].ToString(), iniciales = ininame?[0].ToString() + iniape?[0].ToString(),
nombre = consulta.TX_PRIMERNOM_USUMS.ToString() + " " + consulta.TX_PRIMERAPELL_USUMS.ToString(), nombre = consulta.TX_PRIMERNOM_USUMS?.ToString() + " " + consulta.TX_PRIMERAPELL_USUMS?.ToString(),
pk = consulta.NU_PK_USUMS, pk = consulta.NU_PK_USUMS,
}; };
@ -196,35 +204,6 @@ namespace MSAdminUsuarios.Controllers
_context.USUARIOSMs.Add(usuario); _context.USUARIOSMs.Add(usuario);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
// Perfil quemado de invitado cuando se crea un usuario desde Integrantes Comité
// Calidad (MsProgramacionComite)
var esIntegranteCTC = Request.Headers.FirstOrDefault(h => h.Key == "Comite").Value;
if (String.IsNullOrEmpty(esIntegranteCTC) == false && esIntegranteCTC.Contains("true"))
{
usuario.NU_TIPODOC_USUMS = 0;
usuario.NU_ESTADO_USUMS = 1;
var perfil = new List<PERFILPORUSUARIO>
{
new PERFILPORUSUARIO()
{
NU_PK_PFLXUSU = -1,
NU_FK_PFL = 103, // QUEMADO!
BL_ESTADO_PFLXUSU = 1,
TX_FKDOC_USUMS = usuario.TX_PKDOC_USUMS
}
};
var ctrl = new PerfilesPorUsuarioController(_context);
var errors = await ctrl.GuardarPerfiles(perfil.ToArray(), _context);
if(errors != null && errors.Count > 0)
{
throw new Exception();
}
}
dbContextTransaction.Commit(); dbContextTransaction.Commit();
return Ok(); return Ok();
} }

View File

@ -13,7 +13,9 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.23.1" /> <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.23.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Oracle.EntityFrameworkCore" Version="6.21.61" /> <PackageReference Include="Oracle.EntityFrameworkCore" Version="6.21.61" />
<PackageReference Include="RabbitMQ.Client" Version="6.4.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.1" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.1" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.23.1" /> <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.23.1" />
</ItemGroup> </ItemGroup>
@ -22,4 +24,10 @@
<ProjectReference Include="..\..\Auth\Auth.csproj" /> <ProjectReference Include="..\..\Auth\Auth.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Update="appsettings.Development.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,21 @@
using System.Diagnostics;
namespace MSAdminUsuarios.Models
{
public class RabbitMQConfig
{
public string HostName { get; set; } = null!;
public string UserName { get; set; } = null!;
public string Password { get; set; } = null!;
public override string ToString()
{
if(Debugger.IsAttached) {
return ($"HostName: {HostName},\n " +
$"UserName: {UserName},\n" +
$"Password: {Password}");
}
return "";
}
}
}

View File

@ -1,30 +1,86 @@
using MSAdminUsuarios.Context; using MSAdminUsuarios.Context;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Security; using Security;
using System.Reflection;
using MSAdminUsuarios.Models;
using Microsoft.Extensions.Options;
using RabbitMQ.Client;
using MSAdminUsuarios.Utils;
using RabbitMQ.Client.Events;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
// Add services to the container. var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.Development.json", optional: true, reloadOnChange: true);
// Add services to the container.
builder.Services.AddControllers(); builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen();
#region Logging
// Add logging configuration
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
builder.Logging.AddDebug();
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().AddEventLog());
#warning Cuidado! NO cambiar nombre del proyecto! 19/03/23 -LM
string projectName = Assembly.GetEntryAssembly()?.GetName().Name ?? "MSAdminUsuarios";
var logger = loggerFactory.CreateLogger(projectName);
#endregion
#region Config: Base de Datos
// Cadena de Conexion a Bases de Datos // Cadena de Conexion a Bases de Datos
// var connectionString = builder.Configuration.GetConnectionString("DBPrueba"); var ConString = builder.Configuration.GetSection("ConnectionStrings:ConString").Get<string>();
// var connectionString = builder.Configuration.GetConnectionString("DBProd");
var connectionString = builder.Configuration.GetConnectionString("DBUnisalud");
// Configuración del DbContext // Configuración del DbContext
builder.Services.AddDbContext<ModelContext>(options => builder.Services.AddDbContext<ModelContext>(options =>
{ {
//IConfiguration configuration = builder.Configuration;
options.UseOracle( options.UseOracle(
connectionString, ConString,
options => options.UseOracleSQLCompatibility("11") options =>
options.UseOracleSQLCompatibility("11")
); );
}); });
#endregion
#region Config: RabbitMQ
//Get config desde appsettings.json
builder.Services.Configure<RabbitMQConfig>(builder.Configuration.GetSection("RabbitMQConfig"));
builder.Services.AddSingleton<IConnection>(sp =>
{
var config = sp.GetRequiredService<IOptions<RabbitMQConfig>>().Value;
var factory = new ConnectionFactory
{
HostName = config.HostName,
UserName = config.UserName,
Password = config.Password
};
return factory.CreateConnection();
});
builder.Services.AddScoped<IModel>(provider =>
{
// Creación de channel, declaración de queues y binding
return RabbitMQService.GetRabbitMQChannel(provider, projectName);
});
#endregion
#region Config: Cors
// Enable Cors // Enable Cors
builder.Services.AddCors(options => { builder.Services.AddCors(options => {
options.AddPolicy(name: "widthoutCors", options.AddPolicy(name: "widthoutCors",
@ -35,6 +91,9 @@ builder.Services.AddCors(options => {
}); });
}); });
#endregion
#region Mapping / Build
var app = builder.Build(); var app = builder.Build();
// Configure the HTTP request pipeline. // Configure the HTTP request pipeline.
@ -59,4 +118,10 @@ app.UseAuthorization();
app.MapControllers(); app.MapControllers();
app.Run(); #endregion
// Start and Subscribe to RabbitMQ event
RabbitMQService.ListenForIntegrationEvents(projectName, builder);
app.Run();

View File

@ -0,0 +1,207 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using MSAdminUsuarios.Context;
using MSAdminUsuarios.Controllers;
using MSAdminUsuarios.Models;
using Newtonsoft.Json;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Reflection;
using System.Text;
namespace MSAdminUsuarios.Utils
{
public static class RabbitMQService
{
private static string[] _queues = Array.Empty<string>();
private static string _exchange = "MSAdminUsuarios";
public static IModel GetRabbitMQChannel(IServiceProvider serviceProvider, string projectName)
{
//var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().AddEventLog());
//var logger = loggerFactory.CreateLogger("Rabbit1");
var connection = serviceProvider.GetService<IConnection>();
if (connection == null)
throw new Exception("Connection is null.");
var channel = connection.CreateModel();
//Declare exchange if it doesnt already exist
var exchangeName = projectName;
_exchange = exchangeName;
channel.ExchangeDeclare(
exchange: exchangeName,
type: ExchangeType.Topic,
durable: true,
autoDelete: false,
arguments: null
);
_queues = new string[]
{
$"{exchangeName}.PerfilesPorUsuario",
$"{exchangeName}.Usuarios"
};
foreach (var queue in _queues)
{
channel.QueueDeclare(
queue: queue,
durable: true,
exclusive: false,
autoDelete: false,
arguments: null
);
channel.QueueBind(
queue: queue,
exchange: exchangeName,
routingKey: $"{queue}.*"
);
}
return channel;
}
public static void ListenForIntegrationEvents(string projectName, WebApplicationBuilder builder)
{
RabbitMQConfig mqConfig = builder.Configuration.GetSection("RabbitMQConfig").Get<RabbitMQConfig>();
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().AddEventLog());
//var logger = loggerFactory.CreateLogger("Rabbit2");
//logger.LogInformation("Inicia Rabbitmq con");
ConnectionFactory factory = new()
{
HostName = mqConfig.HostName,
UserName = mqConfig.UserName,
Password = mqConfig.Password,
};
IConnection connection = factory.CreateConnection();
IModel channel = connection.CreateModel();
EventingBasicConsumer consumer = new(channel);
consumer.Received += RabbitMQService.ConsumeRabbitMQEvent;
List<string> queues = new()
{
$"{projectName}.PerfilesPorUsuario",
$"{projectName}.Usuarios",
};
foreach (var queue in queues)
{
channel.BasicConsume(
queue: queue,
autoAck: false,
consumer: consumer
);
}
}
public static async void ConsumeRabbitMQEvent(object? sender, BasicDeliverEventArgs ea)
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
var route = ea.RoutingKey;
if (message == null || message.Length == 0)
{
throw new Exception("Datos no recibidos");
}
if (route == null || route.Length == 0)
{
throw new Exception("RouteKey no recibida");
}
var controller = route.Split(".");
var consumer = (EventingBasicConsumer)sender!;
var model = consumer.Model;
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().AddEventLog());
var logger = loggerFactory.CreateLogger("RMQ.MsAdminUsuarios");
ModelContext context = new();
if (controller[1] == "PerfilesPorUsuario")
{
try
{
var data = JsonConvert.DeserializeObject<PERFILPORUSUARIO[]>(message);
var PPUCtrl = new PerfilesPorUsuarioController(context);
var result = await PPUCtrl.GuardarPerfilesPorUsuario(data!);
if (result is OkResult)
{
model.BasicAck(ea.DeliveryTag, false);
}
else throw new Exception();
}
catch (Exception ex)
{
// Temporalmente solo logeamos el error en lugar de rechazar
logger.LogCritical(ExMessage(ex));
//model.BasicReject(ea.DeliveryTag, true);
model.BasicAck(ea.DeliveryTag, false);
}
return;
}
if (controller[1] == "Usuarios")
{
try
{
var data = JsonConvert.DeserializeObject<USUARIO>(message);
var UsuariosCtrl = new UsuariosController(context);
var result = await UsuariosCtrl.GuardarUsuarios(data!);
if (result is OkResult)
{
model.BasicAck(ea.DeliveryTag, false);
}
else throw new Exception();
}
catch (Exception ex)
{
// Temporalmente solo logeamos el error en lugar de rechazar
logger.LogCritical(ExMessage(ex));
//model.BasicReject(ea.DeliveryTag, true);
model.BasicAck(ea.DeliveryTag, false);
}
return;
}
}
private static string ExMessage(Exception ex)
{
var sb = new StringBuilder();
sb.Append(ex.Message)
.Append(ex.InnerException);
return sb.ToString();
}
}
}

View File

@ -1,9 +1,5 @@
{ {
"ConnectionStrings": { "ConnectionStrings": {
"DBPrueba": "user id=HIMSCAP;password=ITTASA2017;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=181.129.245.90)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROYECTOS)))",
"DBProd": "user id=HIMSCAP;password=ITTASA2017;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.194)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROYECTOS)))",
"DBUnisalud": "user id=Admin;password=LWxZwRFgEpBHtnEHR233;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=unisalud.cc6itcnj1ux9.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=UNISALUD)))",
"ConString": "user id=HIMSCAP;password=ITTASA2017;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=181.129.245.90)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROYECTOS)))" "ConString": "user id=HIMSCAP;password=ITTASA2017;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=181.129.245.90)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROYECTOS)))"
}, },
"RabbitMQConfig": { "RabbitMQConfig": {

View File

@ -1,9 +1,5 @@
{ {
"ConnectionStrings": { "ConnectionStrings": {
"DBPrueba": "user id=HIMSCAP;password=ITTASA2017;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=181.129.245.90)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROYECTOS)))",
"DBProd": "user id=HIMSCAP;password=ITTASA2017;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.194)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROYECTOS)))",
"DBUnisalud": "user id=Admin;password=LWxZwRFgEpBHtnEHR233;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=unisalud.cc6itcnj1ux9.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=UNISALUD)))",
"ConString": "user id=Admin;password=LWxZwRFgEpBHtnEHR233;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=unisalud.cc6itcnj1ux9.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=UNISALUD)))" "ConString": "user id=Admin;password=LWxZwRFgEpBHtnEHR233;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=unisalud.cc6itcnj1ux9.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=UNISALUD)))"
}, },
"RabbitMQConfig": { "RabbitMQConfig": {