public (string response, int estatus) RequestService() { PxUniversalSoapClient wservice = new PxUniversalSoapClient(PxUniversalSoapClient.EndpointConfiguration.PxUniversalSoap); try { string jsonResult = ""; cCampo[] requestInfo = new cCampo[10]; requestInfo[0] = new cCampo(); requestInfo[0].iTipo = eTipo.NE; requestInfo[0].sCampo = "IDGRUPO"; requestInfo[0].sValor = 7; requestInfo[1] = new cCampo(); requestInfo[1].iTipo = eTipo.NE; requestInfo[1].sCampo = "IDCADENA"; requestInfo[1].sValor = 1; requestInfo[2] = new cCampo(); requestInfo[2].iTipo = eTipo.NE; requestInfo[2].sCampo = "IDTIENDA"; requestInfo[2].sValor = 1; requestInfo[3] = new cCampo(); requestInfo[3].iTipo = eTipo.NE; requestInfo[3].sCampo = "IDPOS"; requestInfo[3].sValor = 1; requestInfo[4] = new cCampo(); requestInfo[4].iTipo = eTipo.NE; requestInfo[4].sCampo = "IDCAJERO"; requestInfo[4].sValor = 1; requestInfo[5] = new cCampo(); requestInfo[5].iTipo = eTipo.FD; requestInfo[5].sCampo = "FECHALOCAL"; requestInfo[5].sValor = DateTime.Now.ToString("dd/MM/yyyy"); requestInfo[6] = new cCampo(); requestInfo[6].iTipo = eTipo.HR; requestInfo[6].sCampo = "HORALOCAL"; requestInfo[6].sValor = DateTime.Now.ToString("HH:mm:ss"); requestInfo[7] = new cCampo(); requestInfo[7].iTipo = eTipo.NE; requestInfo[7].sCampo = "TRANSACCION"; requestInfo[7].sValor = currentTransaction; requestInfo[8] = new cCampo(); requestInfo[8].iTipo = eTipo.AN; requestInfo[8].sCampo = "SKU"; requestInfo[8].sValor = SKU; if (Reference != string.Empty) { requestInfo[9] = new cCampo(); requestInfo[9].sCampo = "REFERENCIA"; requestInfo[9].sValor = Encriptacion.PXEncryptFX(Reference, EncryptionKey); requestInfo[9].bEncriptado = true; requestInfo[9].iTipo = eTipo.AN; } if (User == string.Empty || Password == string.Empty) { string result = "Imposible conectar al WS porque no hay credenciales"; return(result, 3); } else { wservice.ClientCredentials.UserName.UserName = User; wservice.ClientCredentials.UserName.Password = Password; } cCampo[] response = null; try { var task = Task.Run(() => wservice.InfoAsync(requestInfo)); // Se establece el tiempo de espera para la respuesta var timeout = TimeSpan.FromSeconds(45); // Obtendremos: TRUE si la tarea se ejecuto dentro del tiempo establecido // FALSE si la tarea sobrepaso de ese tiempo var isTaskFinished = task.Wait(timeout); // Se va contabilizando los intentos para obtener respuesta del WS int attempts = 1; for (int i = 0; i < 3; i++) { //Si se obtuvo respuesta se detiene la iteracion y // continuara con la logica establecida if (isTaskFinished) { response = task.Result; break; } else { //SE incremetnaran los intentos hasta obtener una respuesta attempts++; task = Task.Run(() => wservice.InfoAsync(requestInfo)); } } if (response.Length > 0) { int codeResponse = 0; if (response[0].sCampo == "CODIGORESPUESTA") { string codeDescription; codeResponse = (int)response[0].sValor; if (codeResponse == (int)response[0].sValor) { if (response[1].sCampo == "CODIGORESPUESTADESCR") { codeDescription = response[1].sValor.ToString(); //Actualizar el registro de la transaccion return(codeResponse.ToString(), 3); } return("Error", 3); } } } var Fields = new List <cCampo>(); foreach (var field in response) { if (field.bEncriptado == true) { field.sValor = Encriptacion.PXDecryptFX(field.sValor.ToString(), EncryptionKey); } Fields.Add(field); } jsonResult = JsonConvert.SerializeObject(Fields); return(jsonResult, 1); } catch (System.Net.WebException wex) { return(wex.ToString(), 3); } } catch (System.Net.WebException wex) { return(wex.ToString(), 3); } }