/// <summary> /// Ejecutar una petición de sincronización /// </summary> private ResponseBussiness <int> EnviarPeticionSincronizacion() { return(tryCatch.SafeExecutor(() => { // Leer la información que debe sincronizarse ResultadoSincronizacion resultadoSincronizacion = new ResultadoSincronizacion(); SincronizacionRequest sincronizacionRequest = repository.ObtenerDatosSincronizacion(); String webServicePath = sincronizacionRequest.ServidorDestino + "/PosServiciosMIlano/Sincronizacion/Sincronizacionservice.svc/ejecutarProcesoSincronizacion"; if (!String.IsNullOrEmpty(sincronizacionRequest.ServidorDestino)) { // ******************************* WS REMOTO var webRequest = (HttpWebRequest)WebRequest.Create(webServicePath); webRequest.Method = WebRequestMethods.Http.Post; // Timeout de 30 minutos webRequest.Timeout = 1800000; webRequest.ContentType = "application/json"; var json = JsonConvert.SerializeObject(sincronizacionRequest); try { // Hacer la petición al WS Remoto using (var requestStream = webRequest.GetRequestStream()) { using (var writer = new StreamWriter(requestStream)) { writer.Write(json); } } // Obtener la respuesta del WS Remoto using (var webResponse = (HttpWebResponse)webRequest.GetResponse()) { using (var responseStream = webResponse.GetResponseStream()) { using (var reader = new StreamReader(responseStream)) { var responseData = reader.ReadToEnd(); dynamic resultadoSincronizacionWS = JsonConvert.DeserializeObject(responseData); resultadoSincronizacion.UltimoIdSincronizado = resultadoSincronizacionWS.data.ultimoIdSincronizado; resultadoSincronizacion.MensajeAsociado = resultadoSincronizacionWS.data.mensajeAsociado; resultadoSincronizacion.IdServidorDestino = resultadoSincronizacionWS.data.idServidorDestino; resultadoSincronizacion.ServidorDestino = resultadoSincronizacionWS.data.servidorDestino; } } } } catch (Exception exception) { TryCatchBusinessExecutor tryCatch = new TryCatchBusinessExecutor(); tryCatch.AddErrorLog <OperationResponse>(exception.Message, exception.StackTrace, "Sincronización", exception.ToString(), "Error de sincronización"); } // ******************************* WS REMOTO // Actualizar la información de tabla AUDITORIA_DESTINOS repository.ActualizarAuditoriaDestinos(resultadoSincronizacion); } return 0; })); }
/// <summary> /// Ejecutar proceso para obtener los datos que deben Sincronizarse /// </summary> public SincronizacionRequest ObtenerDatosSincronizacion() { SincronizacionRequest sincronizacionRequest = new SincronizacionRequest(); List <SentenciaSQL> listaSentenciasSQL = new List <SentenciaSQL>(); var parameters = new Dictionary <string, object>(); foreach (var r in data.GetDataReader("[sync].[sp_vanti_SincronizadorObtenerSentenciasSQL]", parameters)) { // Meta información sincronizacionRequest.CodigoTiendaOrigen = Convert.ToInt32(r.GetValue(0)); sincronizacionRequest.CodigoCajaOrigen = Convert.ToInt32(r.GetValue(1)); sincronizacionRequest.IdServidorDestino = Convert.ToInt32(r.GetValue(2)); sincronizacionRequest.ServidorDestino = r.GetValue(3).ToString(); sincronizacionRequest.DebeDetenerEnCasoNoEncontrados = Convert.ToInt32(r.GetValue(4)); sincronizacionRequest.DebeIgnorarLlaveDuplicada = Convert.ToInt32(r.GetValue(5)); sincronizacionRequest.IdSincronizacionMinimoBloque = Convert.ToInt32(r.GetValue(6)); // Sentencias SentenciaSQL sentenciaSQL = new SentenciaSQL(); sentenciaSQL.Id = Convert.ToInt32(r.GetValue(7)); sentenciaSQL.Sentencia = r.GetValue(8).ToString(); listaSentenciasSQL.Add(sentenciaSQL); } sincronizacionRequest.SentenciasSQL = listaSentenciasSQL.ToArray(); return(sincronizacionRequest); }
private ResultadoSincronizacion Sincronizar(SincronizacionRequest sincronizacionRequest, String comandosSQL, int ignorarSentenciaConId) { ResultadoSincronizacion resultadoSincronizacion = new ResultadoSincronizacion(); resultadoSincronizacion.IdServidorDestino = sincronizacionRequest.IdServidorDestino; resultadoSincronizacion.ServidorDestino = sincronizacionRequest.ServidorDestino; var parameters = new Dictionary <string, object>(); List <System.Data.SqlClient.SqlParameter> parametersOut = new List <System.Data.SqlClient.SqlParameter>(); parameters.Add("@DebeDetenerEnCasoNoEncontrados", sincronizacionRequest.DebeDetenerEnCasoNoEncontrados); parameters.Add("@CodigoTiendaOrigen", sincronizacionRequest.CodigoTiendaOrigen); parameters.Add("@CodigoCajaOrigen", sincronizacionRequest.CodigoCajaOrigen); parameters.Add("@IdSincronizacionMinimoBloque", sincronizacionRequest.IdSincronizacionMinimoBloque); parameters.Add("@ComandosSQL", comandosSQL); parameters.Add("@IgnorarSentenciaConId", ignorarSentenciaConId); parametersOut.Add(new System.Data.SqlClient.SqlParameter() { ParameterName = "@UltimoIdSincronizado", Direction = ParameterDirection.Output, SqlDbType = SqlDbType.Int }); parametersOut.Add(new System.Data.SqlClient.SqlParameter() { ParameterName = "@MensajeAsociado", Direction = ParameterDirection.Output, SqlDbType = SqlDbType.NVarChar, Size = 4000 }); var result = data.ExecuteProcedure("[sync].[sp_vanti_SincronizarDatosLocal]", parameters, parametersOut); resultadoSincronizacion.UltimoIdSincronizado = Convert.ToInt32(result["@UltimoIdSincronizado"]); resultadoSincronizacion.MensajeAsociado = result["@MensajeAsociado"].ToString(); return(resultadoSincronizacion); }
/// <summary> /// Ejecutar el proceso para sincronizar los datos recibidos /// </summary> public ResultadoSincronizacion EjecutarSincronizacion(SincronizacionRequest sincronizacionRequest) { // Armar las sentencias String comandosSQL = ""; int idAnterior = -1; for (int i = 0; i < sincronizacionRequest.SentenciasSQL.Length; i++) { if (sincronizacionRequest.SentenciasSQL[i].Id > idAnterior) { comandosSQL += sincronizacionRequest.SentenciasSQL[i].Id + "|||SQLSYNCSENTENCE|||" + sincronizacionRequest.SentenciasSQL[i].Sentencia + "|||SQLSYNCID|||"; idAnterior = sincronizacionRequest.SentenciasSQL[i].Id; } else { // Se aborta el proceso, esto no debería suceder return(new ResultadoSincronizacion()); } } return(this.Sincronizar(sincronizacionRequest, comandosSQL, -1)); }
public ResponseBussiness <ResultadoSincronizacion> EjecutarProcesoSincronizacion(SincronizacionRequest sincronizacionRequest) { return(new SincronizacionBusiness().ProcesarPeticionSincronizacion(sincronizacionRequest)); }
/// <summary> /// Procesar una petición de sincronización /// </summary> public ResponseBussiness <ResultadoSincronizacion> ProcesarPeticionSincronizacion(SincronizacionRequest sincronizacionRequest) { ResultadoSincronizacion resultadoSincronizacion = new ResultadoSincronizacion(); resultadoSincronizacion = this.repository.EjecutarSincronizacion(sincronizacionRequest); return(resultadoSincronizacion); }