예제 #1
0
        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);
        }