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); } }
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); }
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); } } }
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); }