public static void Configure(SoapHttpClientProtocol gateway) { if (gateway == null) throw new ArgumentNullException("gateway"); string url = _config.GetValueFromAppConfig<string>(gateway.GetType().FullName, null); if (string.IsNullOrEmpty(url)) throw new ConfigurationErrorsException(string.Format(CultureInfo.CurrentCulture, "The configuration key {0} for this gateway is missing", gateway.GetType().FullName)); gateway.Url = url; }
internal WebMethod(SoapHttpClientProtocol svc, MethodInfo methodInfo) { _svc = svc; _methodInfo = methodInfo; string argType = CustomProxyGenerator.GetMethodArgType(methodInfo.Name); _arg = Activator.CreateInstance(svc.GetType().Assembly.GetType(argType)); }
public static System.Web.Services.Protocols.SoapHttpClientProtocol ClientProxyFactory( Parametro oParam, TServico TipoServico) { 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.value)) { throw new Exception("Serviço não esta associado com nenhuma classe cliente."); } nomeClasse = atr.value; } //particularidades if (oParam.UF == TCodUfIBGE.Bahia && oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.Normal)//Bahia { if (TipoServico == TServico.Status && oParam.versao == VersaoXML.NFe_v310) { nomeClasse = "NfeStatusServico"; } if (TipoServico == TServico.Consulta && oParam.versao == VersaoXML.NFe_v310) { nomeClasse = "NfeConsulta"; } if (TipoServico == TServico.Inutilizacao && oParam.versao == VersaoXML.NFe_v310) { nomeClasse = "NfeInutilizacao"; } } ClassName = "RDI.NFe2.Business." + GetAmbWebService(oParam, TipoServico) + "." + TipoServico.ToString() + "."; 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 != TServico.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 == TServico.ManifestacaoDestinatario) || //ManifestacaoDestinatario deverá usar AN 91 (TipoServico == TServico.DownloadNF)) //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 == TServico.Consulta && oParam.versao == VersaoXML.NFe_v200) { versao = "2.01"; } //Particularidade para RecepcaoEvento if (TipoServico == TServico.RecepcaoEvento) { versao = oParam.versaoDadosEventos; } //particularidade para consultaCadastro if (TipoServico == TServico.Cadastro) { versao = "2.00"; } //particularidade para manifestacao destinatario if (TipoServico == TServico.ManifestacaoDestinatario || TipoServico == TServico.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 ExecutaServico( System.Web.Services.Protocols.SoapHttpClientProtocol oServico, Object DADOS, Parametro oParam) { try { string dados = XMLUtils.GetXML(DADOS, oParam.versao); #region particularidades if (oParam.UF == TCodUfIBGE.Parana && (DADOS.GetType() == typeof(SchemaXML200.TEnviNFe) || DADOS.GetType() == typeof(SchemaXML300.TEnviNFe) || DADOS.GetType() == typeof(SchemaXML310.TEnviNFe))) { dados = dados.Replace("<NFe>", "<NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\">"); } #endregion XmlNode node = null; XmlDocument doc = new XmlDocument(); XmlReader reader = XmlReader.Create(new StringReader(dados)); reader.MoveToContent(); node = doc.ReadNode(reader); InicializaServico(oServico, oParam); if (DADOS.GetType() == typeof(RDI.NFe2.GNRE.TLote_GNRE)) { XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("processar", System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else if (DADOS.GetType() == typeof(RDI.NFe2.GNRE.TConsLote_GNRE)) { XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("consultar", System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else if (DADOS.GetType() == typeof(RDI.NFe2.GNRE.TConsultaConfigUf)) { XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("consultar", System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else if (DADOS.GetType().GetInterface("ITConsCad") != null) { XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("consultaCadastro2", System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else if (DADOS.GetType().GetInterface("ITEnvEvento") != null) { XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("nfeRecepcaoEvento", System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else if (DADOS.GetType().GetInterface("ITEnviNFe") != null) { if (((ITEnviNFe)DADOS).versao == "2.00") { //versao 2.00 #region particularidades if (oParam.UF == TCodUfIBGE.Parana) { if (oParam.tipoAmbiente == TAmb.Homologacao) { oServico.Url = @"https://homologacao.nfe2.fazenda.pr.gov.br/nfe/NFeRecepcao2"; } else { oServico.Url = @"https://nfe2.fazenda.pr.gov.br/nfe/NFeRecepcao2"; } } #endregion XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("nfeRecepcaoLote2", System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else { //versao 3.00 //Somente meto Assincrono //var test = (SchemaXML300.TEnviNFe)DADOS; //test.indSinc = SchemaXML300.TEnviNFeIndSinc.Item0;//Não indica sincrono //test.indSinc = SchemaXML300.TEnviNFeIndSinc.Item1; //indica sincrono, mas depende da SEFAZ autorizadora implementar servico. //***.**.Autorizacao.NfeAutorizacao proxy = new ***.**.Autorizacao.NfeAutorizacao(); //var ret = proxy.nfeAutorizacaoLote(node); //sincrono poderá ter o Nó : TProtNFe //assincrono terá o Nó : TRetEnviNFeInfRec var fnNome = "nfeAutorizacaoLote"; XmlNode ret = (XmlNode)oServico.GetType().InvokeMember(fnNome, System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } } else if (DADOS.GetType().GetInterface("ITConsReciNFe") != null) { if (((ITConsReciNFe)DADOS).versao == "2.00") { //versao 2.00 #region particularidades if (oParam.UF == TCodUfIBGE.Parana) { if (oParam.tipoAmbiente == TAmb.Homologacao) { oServico.Url = @"https://homologacao.nfe2.fazenda.pr.gov.br/nfe/NFeRetRecepcao2"; } else { oServico.Url = @"https://nfe2.fazenda.pr.gov.br/nfe/NFeRetRecepcao2"; } } #endregion XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("nfeRetRecepcao2", System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else { var fnNome = "nfeRetAutorizacaoLote"; if (oParam.UF == TCodUfIBGE.Parana && oParam.versao == VersaoXML.NFe_v310) { fnNome = "nfeRetAutorizacao"; } //versao 3.00 ou 3.10 XmlNode ret = (XmlNode)oServico.GetType().InvokeMember(fnNome, System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); var temp = XMLUtils.GetXML(ret, oParam.versao); if (oParam.UF == TCodUfIBGE.Pernambuco) { //SEFAZ PE está retornando retEnviNFe ao inves de retConsReciNFe quando lote ainda está em processamento temp = temp.Replace("retEnviNFe", "retConsReciNFe"); } return(temp); } } else if (DADOS.GetType().GetInterface("ITConsStatServ") != null) { var fnNome = "nfeStatusServicoNF2"; if ((oParam.UF == TCodUfIBGE.Parana || oParam.UF == TCodUfIBGE.Bahia) && oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.Normal && oParam.versao == VersaoXML.NFe_v310) { fnNome = "nfeStatusServicoNF"; } XmlNode ret = (XmlNode)oServico.GetType().InvokeMember(fnNome, System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else if (DADOS.GetType().GetInterface("ITInutNFe") != null) { var fnNome = "nfeInutilizacaoNF2"; if ((oParam.UF == TCodUfIBGE.Parana || oParam.UF == TCodUfIBGE.Bahia) && oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.Normal && oParam.versao == VersaoXML.NFe_v310) { fnNome = "nfeInutilizacaoNF"; } XmlNode ret = (XmlNode)oServico.GetType().InvokeMember(fnNome, System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else if (DADOS.GetType().GetInterface("ITConsSitNFe") != null) { string fnNome = "nfeConsultaNF2"; if ((oParam.UF == TCodUfIBGE.Parana || oParam.UF == TCodUfIBGE.Bahia) && oParam.tipoEmissao == TNFeInfNFeIdeTpEmis.Normal && oParam.versao == VersaoXML.NFe_v310) { fnNome = "nfeConsultaNF"; } XmlNode ret = (XmlNode)oServico.GetType().InvokeMember(fnNome, System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else if (DADOS.GetType().GetInterface("IDistDFeInt") != null) { XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("nfeDistDFeInteresse", System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else if (DADOS.GetType().GetInterface("ITDownloadNFe") != null) { XmlNode ret = (XmlNode)oServico.GetType().InvokeMember("nfeDownloadNF", System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else { throw new Exception("Tipo de objeto de envio não mapeado. Consulte o administrador do Sistema."); } } catch (Exception ex) { String msg = ex.Message; if (ex.InnerException != null) { msg += " inner : " + ex.InnerException.Message; } if (ex.InnerException.InnerException != null) { msg += " inner : " + ex.InnerException.InnerException.Message; } throw new Exception("Erro ao executar Serviço : typeof(" + DADOS.GetType().ToString() + "). Verifique sua conexão com a Internet, configurações de proxy e certificado. " + msg); } }
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); } } }