コード例 #1
0
        public static System.Web.Services.Protocols.SoapHttpClientProtocol SoapHttpClientFactory(TServer ServerName, string Environment, TService ServiceType)
        {
            String ClassName = "";

            try
            {
                var url = GetURL(ServerName, Environment, ServiceType);
                ClassName = $"RDI.NFe2.Webservices.NF4.HUB.{  ServiceType.ToString() }.{GetWSName(ServiceType)}";
                //ClassName = $"RDI.NFe2.Webservices.NF4.HUB.{  ServiceType.ToString() }.{GetWSName(ServiceType)}{((ServerName == TServer.NFe_SVAN || ServerName == TServer.NFe_SVCAN) ? "ForaPadrao" : "")}";
                //ClassName = $"RDI.NFe2.Webservices.NF4.HUB.{  ServiceType.ToString() }.{GetWSName(ServiceType)}{((ServerName == TServer.NFe_SVCAN) ? "ForaPadrao" : "")}";

                Type classType = GetCurrentAssembly().GetType(ClassName);

                if (classType == null)
                {
                    throw new Exception("Não foi possível definir o tipo do cliente de webservice. #ClientProxyFactory");
                }

                var oServico = (System.Web.Services.Protocols.SoapHttpClientProtocol)System.Activator.CreateInstance(classType, url);

                return(oServico);
            }
            catch (Exception ex)
            {
                throw new Exception("ClientProxyFactory # não foi possível criar o cliente (" + ClassName + ") para acesso aos webservices da SEFAZ. InnerException: " + ex.Message);
            }
        }
コード例 #2
0
        private static HubConfiguration GetHubConfiguration(TService ServiceType)
        {
            var hub = (HubConfiguration)ServiceType.GetType().GetField(ServiceType.ToString()).GetCustomAttributes(typeof(HubConfiguration), false).FirstOrDefault();

            if (hub == null)
            {
                throw new Exception("Serviço não está declarado.");
            }
            if (string.IsNullOrEmpty(hub.WSName) || string.IsNullOrEmpty(hub.WSMethod))
            {
                throw new Exception("Serviço não está associado.");
            }

            return(hub);
        }
コード例 #3
0
        public static System.Web.Services.Protocols.SoapHttpClientProtocol ClientProxyFactory(Parametro oParam, TService TipoServico)
        {
            if (oParam.versao == VersaoXML.NFe_v400 &&
                (TipoServico == TService.Autorizacao ||
                 TipoServico == TService.RetAutorizacao ||
                 TipoServico == TService.ConsultaProtocolo ||
                 TipoServico == TService.Inutilizacao ||
                 TipoServico == TService.RecepcaoEvento ||
                 TipoServico == TService.Cadastro ||
                 TipoServico == TService.Status))
            {
                if (oParam.conexao == TipoConexao.NFe)
                {
                    var    tServer  = TServer.NaoMapeado;
                    string Ambiente = oParam.tipoAmbiente.ToString();

                    var AtendidoPor = (NFe_AtendidoPor)typeof(TCodUfIBGE).GetField(oParam.UF.ToString()).GetCustomAttributes(typeof(NFe_AtendidoPor), false).FirstOrDefault();
                    if (AtendidoPor == null)
                    {
                        throw new Exception("UF não está associado com nenhum Servidor Autorizador.");
                    }

                    if (oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.ContingenciaSVCAN || oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.ContingenciaSVCRS)
                    {
                        tServer = AtendidoPor.ServidorAutorizadorSVC;
                    }
                    else
                    {
                        tServer = AtendidoPor.ServidorAutorizador;
                    }

                    return(RDI.NFe2.Webservices.WSUtils.SoapHttpClientFactory(tServer, Ambiente, TipoServico));
                }
                else if (oParam.conexao == TipoConexao.NFCe)
                {
                    var AtendidoPor = (NFCe_AtendidoPor)typeof(TCodUfIBGE).GetField(oParam.UF.ToString()).GetCustomAttributes(typeof(NFCe_AtendidoPor), false).FirstOrDefault();
                    if (AtendidoPor == null)
                    {
                        throw new Exception("UF não está associado com nenhum Servidor Autorizador.");
                    }

                    string Ambiente = oParam.tipoAmbiente.ToString();

                    return(RDI.NFe2.Webservices.WSUtils.SoapHttpClientFactory(AtendidoPor.ServidorAutorizador, Ambiente, TipoServico));
                }
                else
                {
                    throw new Exception("UF não está associado com nenhum Servidor Autorizador.");
                }
            }
            else
            {
                //TODO : enviar todos os webservices ativos para o projeto rdi.nfe.webservices após a desativação da versao 3.10

                String ClassName = "";
                try
                {
                    string nomeClasse = string.Empty;
                    //buscar nome do metodo pelo tServico
                    foreach (ClasseServico atr in TipoServico.GetType().GetField(TipoServico.ToString()).GetCustomAttributes(typeof(ClasseServico), false))
                    {
                        if (String.IsNullOrEmpty(atr.NomeClasse))
                        {
                            throw new Exception("Serviço não esta associado com nenhuma classe cliente.");
                        }
                        nomeClasse = atr.NomeClasse;
                    }

                    //particularidades
                    if (oParam.UF == TCodUfIBGE.Bahia && oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.Normal && oParam.conexao == TipoConexao.NFe)//Bahia
                    {
                        if (TipoServico == TService.Status && oParam.versao == VersaoXML.NFe_v310)
                        {
                            nomeClasse = "NfeStatusServico";
                        }

                        if (TipoServico == TService.ConsultaProtocolo && oParam.versao == VersaoXML.NFe_v310)
                        {
                            nomeClasse = "NfeConsulta";
                        }

                        if (TipoServico == TService.Inutilizacao && oParam.versao == VersaoXML.NFe_v310)
                        {
                            nomeClasse = "NfeInutilizacao";
                        }
                    }

                    var subNamespace = TipoServico.ToString();

                    if (TipoServico == TService.ConsultaProtocolo)
                    {
                        subNamespace = "Consulta";
                    }
                    else if (TipoServico == TService.ManifestacaoDestinatario || TipoServico == TService.EPEC)
                    {
                        subNamespace = "Eventos";
                    }

                    ClassName = "RDI.NFe2.Business." + GetAmbWebService(oParam, TipoServico) + "." + subNamespace + ".";

                    String headerClassName = ClassName + "nfeCabecMsg";
                    ClassName += nomeClasse;

                    Type classType = GetMyAssembly().GetType(ClassName);

                    if (classType == null)
                    {
                        throw new Exception("Não foi possível definir o tipo do cliente de webservice. #ClientProxyFactory");
                    }

                    System.Web.Services.Protocols.SoapHttpClientProtocol oServico =
                        (System.Web.Services.Protocols.SoapHttpClientProtocol)System.Activator.CreateInstance(classType);

                    if (TipoServico != TService.ConsultaDFe) //ConsultaDFe não tem header
                    {
                        #region Instancia cabecalho

                        Type headerClassType = GetMyAssembly().GetType(headerClassName);

                        if (headerClassType == null)
                        {
                            throw new Exception("Não foi possível definir o tipo do header do cliente de webservice. #ClientProxyFactory");
                        }

                        System.Web.Services.Protocols.SoapHeader oCabecalho =
                            (System.Web.Services.Protocols.SoapHeader)System.Activator.CreateInstance(headerClassType);


                        if ((TipoServico == TService.ManifestacaoDestinatario) || //ManifestacaoDestinatario deverá usar AN 91
                            (TipoServico == TService.DownloadNF) ||               //DownloadNF deverá usar AN 91
                            (TipoServico == TService.EPEC))                       //DownloadNF deverá usar AN 91
                        {
                            oCabecalho.GetType().GetProperty("cUF").SetValue(oCabecalho, "91", null);
                        }
                        else
                        {
                            oCabecalho.GetType().GetProperty("cUF").SetValue(oCabecalho,
                                                                             ((System.Xml.Serialization.XmlEnumAttribute)oParam.UF.GetType().GetField(
                                                                                  oParam.UF.ToString()).GetCustomAttributes(
                                                                                  typeof(System.Xml.Serialization.XmlEnumAttribute), false)[0]).Name,
                                                                             null);
                        }
                        string versao = oParam.versaoDados;

                        //particularidade para ConsSitNFe usando v200
                        if (TipoServico == TService.ConsultaProtocolo && oParam.versao == VersaoXML.NFe_v200)
                        {
                            versao = "2.01";
                        }

                        //Particularidade para RecepcaoEvento
                        if (TipoServico == TService.RecepcaoEvento)
                        {
                            versao = oParam.versaoDadosEventos;
                        }

                        //particularidade para consultaCadastro
                        if (TipoServico == TService.Cadastro)
                        {
                            versao = "2.00";
                        }

                        //particularidade para manifestacao destinatario
                        if (TipoServico == TService.ManifestacaoDestinatario || TipoServico == TService.EPEC || TipoServico == TService.DownloadNF)
                        {
                            versao = "1.00";
                        }

                        oCabecalho.GetType().GetProperty("versaoDados").SetValue(oCabecalho, versao, null);
                        oServico.GetType().GetProperty("nfeCabecMsgValue").SetValue(oServico, oCabecalho, null);
                        #endregion
                    }
                    return(oServico);
                }
                catch (Exception ex)
                {
                    throw new Exception("ClientProxyFactory # não foi possível criar o cliente (" + ClassName + ") para acesso aos webservices da SEFAZ. InnerException: " + ex.Message);
                }
            }
        }
コード例 #4
0
        private static string GetAmbWebService(Parametro oParam, TService tipoServico)
        {
            String ambiente = string.Empty;

            if (oParam.conexao == TipoConexao.NFCe)
            {
                //oParam.NFCe [HNC|PNC].[AtendidoPor].***
                if (oParam.tipoAmbiente == TAmb.Homologacao)
                {
                    ambiente = "HNC.";
                }
                else if (oParam.tipoAmbiente == TAmb.Producao)
                {
                    ambiente = "PNC.";
                }
                else
                {
                    throw new Exception("Tipo de Ambiente não definido.");
                }
            }
            else if (oParam.conexao == TipoConexao.GNRE)
            {
                //oParam.NFCe [HNC|PNC].[AtendidoPor].***
                if (oParam.tipoAmbiente == TAmb.Homologacao)
                {
                    ambiente = "HWG.";
                }
                else if (oParam.tipoAmbiente == TAmb.Producao)
                {
                    ambiente = "PWG.";
                }
                else
                {
                    throw new Exception("Tipo de Ambiente não definido.");
                }
            }
            else
            {
                if ((tipoServico == TService.Autorizacao || tipoServico == TService.RetAutorizacao) && oParam.versao != VersaoXML.NFe_v310)
                {
                    throw new ArgumentException("V200 não possui Webservice de " + tipoServico.ToString());
                }


                // HNF|PNF :  são utilizados pelos novos servicos de todas as UFs e por todos os servicos de SP e PR
                // os demais servicos utilizam [HWS|PWS]
                if ((tipoServico != TService.Cadastro) &&                 //Cadastro deverá usar PWS|HWS
                    (tipoServico != TService.ConsultaDFe) &&              //ConsultaDFe deverá usar PWS|HWS
                    (tipoServico != TService.DownloadNF) &&               //DownloadNF deverá usar PWS|HWS
                    (tipoServico != TService.EPEC) &&                     //ManifestacaoDestinatario deverá usar PWS|HWS
                    (tipoServico != TService.ManifestacaoDestinatario) && //ManifestacaoDestinatario deverá usar PWS|HWS
                    (tipoServico == TService.Autorizacao || tipoServico == TService.RetAutorizacao
                     //particularidades
                     || (oParam.UF == TCodUfIBGE.RioGrandedoSul) || //atualizado somente com os WS da versão 3.1 //25/05/2015
                     (oParam.UF == TCodUfIBGE.SaoPaulo && oParam.versao == VersaoXML.NFe_v310) ||
                     (oParam.UF == TCodUfIBGE.Parana && oParam.versao == VersaoXML.NFe_v310) ||
                     (oParam.UF == TCodUfIBGE.Bahia && oParam.versao == VersaoXML.NFe_v310 && tipoServico != TService.RecepcaoEvento)))
                {
                    //[HNF|PNF].
                    if (oParam.tipoAmbiente == TAmb.Homologacao)
                    {
                        ambiente = "HNF.";
                    }
                    else if (oParam.tipoAmbiente == TAmb.Producao)
                    {
                        ambiente = "PNF.";
                    }
                    else
                    {
                        throw new Exception("Tipo de Ambiente não definido.");
                    }
                }
                else
                {
                    //[HWS|PWS].
                    if (oParam.tipoAmbiente == TAmb.Homologacao)
                    {
                        ambiente = "HWS.";
                    }
                    else if (oParam.tipoAmbiente == TAmb.Producao)
                    {
                        ambiente = "PWS.";
                    }
                    else
                    {
                        throw new Exception("Tipo de Ambiente não definido.");
                    }
                }
            }

            //Verificar de acordo com a UF e determinar qual webservice atende.
            if (oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.ContingenciaSVCAN ||
                oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.ContingenciaSVCRS)
            {
                foreach (NFe_AtendidoPor atr in oParam.UF.GetType().GetField(oParam.UF.ToString()).GetCustomAttributes(typeof(NFe_AtendidoPor), false))
                {
                    if (atr.ServidorAutorizador == TServer.NaoMapeado)
                    {
                        throw new Exception("UF não esta sendo atendida por nenhum WebService do SVC.");
                    }

                    ambiente += atr.ServidorAutorizadorSVC.ToString().Replace("NFe_", "").Replace("NFCe_", "");
                }
            }
            else if (oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.ContigenciaSCAN)
            {
                ambiente += "SCAN";
            }
            else
            {
                //particularidade
                if (tipoServico == TService.Cadastro && oParam.UF == TCodUfIBGE.EspiritoSanto)
                {
                    ambiente += "ES";
                }
                else if (tipoServico == TService.ManifestacaoDestinatario || tipoServico == TService.ConsultaDFe || tipoServico == TService.EPEC || tipoServico == TService.DownloadNF)
                {
                    ambiente += "AN";
                }
                else
                {
                    if (oParam.conexao == TipoConexao.NFCe)
                    {
                        foreach (NFCe_AtendidoPor atr in oParam.UF.GetType().GetField(oParam.UF.ToString()).GetCustomAttributes(typeof(NFCe_AtendidoPor), false))
                        {
                            if (atr.ServidorAutorizador == TServer.NaoMapeado)
                            {
                                throw new Exception("UF não esta sendo atendida por nenhum WebService.");
                            }

                            ambiente += atr.ServidorAutorizador.ToString().Replace("NFe_", "").Replace("NFCe_", "");
                        }
                    }
                    else if (oParam.conexao == TipoConexao.GNRE)
                    {
                        ambiente += "GNRE";
                    }
                    else
                    {
                        foreach (NFe_AtendidoPor atr in oParam.UF.GetType().GetField(oParam.UF.ToString()).GetCustomAttributes(typeof(NFe_AtendidoPor), false))
                        {
                            if (atr.ServidorAutorizador == TServer.NaoMapeado)
                            {
                                throw new Exception("UF não esta sendo atendida por nenhum WebService.");
                            }

                            ambiente += atr.ServidorAutorizador.ToString().Replace("NFe_", "").Replace("NFCe_", "");
                        }
                    }
                }
            }
            return(ambiente);
        }