private string Request(MetodoWebService metodo, string xml) { if (SalvarXmls) { if (!Directory.Exists(PathXmls)) { Directory.CreateDirectory(PathXmls); } string path = Path.Combine(PathXmls, $"{metodo}Request_{DateTime.Now:yyyy-MM-dd_HHmmss}.xml"); File.WriteAllText(path, xml); } XmlEnvio = string.Empty; XmlResposta = string.Empty; var _timeout = TimeSpan.FromMilliseconds(Timeout); X509Certificate2 _certificado = null; try { switch (CertificadoTipo) { case TipoCertificado.A1Repositorio: _certificado = CertificadoDigital.ObterDoRepositorio(CertificadoSerial, OpenFlags.MaxAllowed); break; case TipoCertificado.A1ByteArray: _certificado = CertificadoDigital.ObterDoArrayBytes(CertificadoArrayBytes, CertificadoSenha); break; case TipoCertificado.A1Arquivo: _certificado = CertificadoDigital.ObterDeArquivo(CertificadoPath, CertificadoSenha); break; case TipoCertificado.A3: _certificado = CertificadoDigital.ObterDoRepositorioPassandoPin(CertificadoSerial, CertificadoSenha); break; case TipoCertificado.Nenhum: break; default: throw new ArgumentOutOfRangeException("Tipo de certificado não implementado"); } switch (metodo) { case MetodoWebService.Login: using (var rqst = new LogonServiceClient(_timeout)) { try { XmlResposta = rqst.Login(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.Logout: using (var rqst = new LogonServiceClient(_timeout)) { try { XmlResposta = rqst.Logout(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.MotoristaGravar: using (var rqst = new MotoristasServiceClient(_timeout)) { try { XmlResposta = rqst.MotoristaGravar(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.MotoristaObter: using (var rqst = new MotoristasServiceClient(_timeout)) { try { XmlResposta = rqst.MotoristaObter(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.ProprietarioGravar: using (var rqst = new ProprietariosServiceClient(_timeout)) { try { XmlResposta = rqst.ProprietarioGravar(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.ProprietarioObter: using (var rqst = new ProprietariosServiceClient(_timeout)) { try { XmlResposta = rqst.ProprietarioObter(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.VeiculoGravar: using (var rqst = new VeiculosServiceClient(_timeout)) { try { XmlResposta = rqst.VeiculoGravar(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.VeiculoObter: using (var rqst = new VeiculosServiceClient(_timeout)) { try { XmlResposta = rqst.VeiculoObter(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.PefAdicionarOperacaoTransporte: using (var rqst = new PefServiceClient(_timeout)) { try { XmlResposta = rqst.AdicionarOperacaoTransportePef(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.PefAdicionarPagamento: using (var rqst = new PefServiceClient(_timeout)) { try { XmlResposta = rqst.AdicionarPagamentoPef(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.PefObterCodigoIdentificacaoOperacaoTransportePorIdOperacaoCliente: using (var rqst = new PefServiceClient(_timeout)) { try { XmlResposta = rqst.ObterCodigoIdentificacaoOperacaoTransportePorIdOperacaoClientePef(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.PefObterOperacaoTransportePdf: using (var rqst = new PefServiceClient(_timeout)) { try { XmlResposta = rqst.ObterOperacaoTransportePdfPef(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.PefRetificarOperacaoTransporte: using (var rqst = new PefServiceClient(_timeout)) { try { XmlResposta = rqst.RetificarOperacaoTransportePef(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.PefCancelarOperacaoTransporte: using (var rqst = new PefServiceClient(_timeout)) { try { XmlResposta = rqst.CancelarOperacaoTransportePef(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.PefEncerrarOperacaoTransporte: using (var rqst = new PefServiceClient(_timeout)) { try { XmlResposta = rqst.EncerrarOperacaoTransportePef(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; case MetodoWebService.PefAdicionarViagem: using (var rqst = new PefServiceClient(_timeout)) { try { XmlResposta = rqst.AdicionarViagemPef(xml); } finally { XmlEnvio = rqst.XmlEnvio; } } break; default: throw new NotImplementedException(); } if (SalvarXmls) { string path = Path.Combine(PathXmls, $"{metodo}Response_{DateTime.Now:yyyy-MM-dd_HHmmss}.xml"); File.WriteAllText(path, XmlResposta); } } finally { #if NETFRAMEWORK if (_certificado != null) { _certificado.ForceUnload(); } #else _certificado?.Dispose(); #endif } return(XmlResposta); }