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 string ApplyServerURL(this SoapHttpClientProtocol service) { try { string name = service.GetType().Name; return(string.Format("{0}{1}.svc", Settings.Instance.ServerAddress, name)); } catch { return(string.Empty); } }
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; }
public static string SoapService(SoapHttpClientProtocol webService, string webServiceMethod, object[] webServiceParameters) { object response = null; try { //SSLogging.SSLogger.LogInfo("SoapService:{0}; Method:{1}; Parameter:{2}", webService.Url, webServiceMethod, string.Join<object>("\r\n", webServiceParameters)); //SSLogging.SSLogger.Flush(); response = webService.GetType().GetMethod(webServiceMethod).Invoke(webService, webServiceParameters); } catch (Exception ex) { response = ex.Message; } string result = (response ?? "").ToString(); //SSLogging.SSLogger.LogInfo("SoapService:{0}; Method:{1}; Result:{2}", webService.Url, webServiceMethod, result); //SSLogging.SSLogger.Flush(); return(result); }
public void WebServiceProxyFactoryCreatesAnObjectOfTheOnlineProxyType() { Request request = new Request(); request.Endpoint = "endpoint"; request.OnlineProxyType = typeof(MockWebServiceProxy); NetworkCredential creds = new NetworkCredential("user", "pwd"); MockEndpointCatalog catalog = new MockEndpointCatalog(); MockEndpoint endpoint = new MockEndpoint("endpoint"); endpoint.Default = new MockEndpointConfig(defaultURL); endpoint.Default.Credential = creds; catalog.Endpoints.Add("endpoint", endpoint); WebServiceProxyFactory factory = new WebServiceProxyFactory((IEndpointCatalog)catalog); SoapHttpClientProtocol proxy = (SoapHttpClientProtocol)factory.GetOnlineProxy(request, "Network"); Assert.IsNotNull(proxy); Assert.AreEqual(typeof(MockWebServiceProxy), proxy.GetType()); }
protected void ChangeCacheKeyAndPreferredHostForSpecifiedMethod(SoapHttpClientProtocol ws, MsnServiceType st, MsnServiceState ss, object request) { if (st == MsnServiceType.AB || st == MsnServiceType.Sharing || st == MsnServiceType.Storage) { DeltasList deltas = NSMessageHandler.ContactService.Deltas; if (deltas == null) { throw new MSNPSharpException("Deltas is null."); } string methodName = ss.MethodName; string preferredHostKey = ws.ToString() + "." + methodName; CacheKeyType keyType = (st == MsnServiceType.Storage) ? CacheKeyType.StorageServiceCacheKey : CacheKeyType.OmegaContactServiceCacheKey; string originalUrl = ws.Url; string originalHost = FetchHost(ws.Url); bool needRequest = false; lock (deltas.SyncObject) { needRequest = (deltas.CacheKeys.ContainsKey(keyType) == false || deltas.CacheKeys[keyType] == string.Empty || (deltas.CacheKeys[keyType] != string.Empty && (deltas.PreferredHosts.ContainsKey(preferredHostKey) == false || deltas.PreferredHosts[preferredHostKey] == String.Empty))); } if (needRequest) { try { Trace.WriteLineIf(Settings.TraceSwitch.TraceInfo, ws.GetType().ToString() + " is requesting a cachekey and preferred host for calling " + methodName); switch (keyType) { case CacheKeyType.OmegaContactServiceCacheKey: ws.Url = ws.Url.Replace(originalHost, MSNService.ContactServiceRedirectionHost); break; case CacheKeyType.StorageServiceCacheKey: ws.Url = ws.Url.Replace(originalHost, MSNService.StorageServiceRedirectionHost); break; } ws.GetType().InvokeMember(methodName, System.Reflection.BindingFlags.InvokeMethod, null, ws, new object[] { request }); } catch (Exception ex) { bool getHost = false; if (ex.InnerException is WebException && ex.InnerException != null) { WebException webException = ex.InnerException as WebException; HttpWebResponse webResponse = webException.Response as HttpWebResponse; if (webResponse != null) { if (webResponse.StatusCode == HttpStatusCode.Moved || webResponse.StatusCode == HttpStatusCode.MovedPermanently || webResponse.StatusCode == HttpStatusCode.Redirect || webResponse.StatusCode == HttpStatusCode.RedirectKeepVerb) { string redirectUrl = webResponse.Headers[HttpResponseHeader.Location]; if (!string.IsNullOrEmpty(redirectUrl)) { getHost = true; lock (deltas.SyncObject) deltas.PreferredHosts[preferredHostKey] = FetchHost(redirectUrl); Trace.WriteLineIf(Settings.TraceSwitch.TraceVerbose, "Get redirect URL by HTTP error succeed, method " + methodName + ":\r\n " + "Original: " + FetchHost(ws.Url) + "\r\n " + "Redirect: " + FetchHost(redirectUrl) + "\r\n"); } #region Fetch CacheKey try { XmlDocument errdoc = new XmlDocument(); string errorMessage = ex.InnerException.Message; string xmlstr = errorMessage.Substring(errorMessage.IndexOf("<?xml")); xmlstr = xmlstr.Substring(0, xmlstr.IndexOf("</soap:envelope>", StringComparison.InvariantCultureIgnoreCase) + "</soap:envelope>".Length); //I think the xml parser microsoft used internally is just a super parser, it can ignore everything. xmlstr = xmlstr.Replace("&", "&"); xmlstr = xmlstr.Replace("&", "&"); errdoc.LoadXml(xmlstr); XmlNodeList findnodelist = errdoc.GetElementsByTagName("CacheKey"); if (findnodelist.Count > 0 && !String.IsNullOrEmpty(findnodelist[0].InnerText)) { deltas.CacheKeys[keyType] = findnodelist[0].InnerText; } } catch (Exception exc) { Trace.WriteLineIf(Settings.TraceSwitch.TraceError, "An error occured while getting CacheKey:\r\n" + "Service: " + ws.GetType().ToString() + "\r\n" + "MethodName: " + methodName + "\r\n" + "Message: " + exc.Message); } #endregion } } } if (!getHost) { Trace.WriteLineIf(Settings.TraceSwitch.TraceError, "An error occured while getting CacheKey and Preferred host:\r\n" + "Service: " + ws.GetType().ToString() + "\r\n" + "MethodName: " + methodName + "\r\n" + "Message: " + ex.Message); lock (deltas.SyncObject) deltas.PreferredHosts[preferredHostKey] = originalHost; //If there's an error, we must set the host back to its original value. } } deltas.Save(); } lock (deltas.SyncObject) { if (originalHost != null && originalHost != String.Empty) { if (deltas.PreferredHosts.ContainsKey(preferredHostKey)) { ws.Url = originalUrl.Replace(originalHost, FetchHost(deltas.PreferredHosts[preferredHostKey])); } else { //This means the redirection URL returns respond content. lock (deltas.SyncObject) { deltas.PreferredHosts[preferredHostKey] = ws.Url; deltas.Save(); } Trace.WriteLineIf(Settings.TraceSwitch.TraceInfo, "The redirect URL returns correct result, use " + ws.Url + " for " + preferredHostKey); } } // Set cache key if (st == MsnServiceType.AB) { ((ABServiceBinding)ws).ABApplicationHeaderValue.CacheKey = deltas.CacheKeys[keyType]; } else if (st == MsnServiceType.Sharing) { ((SharingServiceBinding)ws).ABApplicationHeaderValue.CacheKey = deltas.CacheKeys[keyType]; } else if (st == MsnServiceType.Storage) { ((StorageService)ws).AffinityCacheHeaderValue.CacheKey = deltas.CacheKeys[keyType]; } } } }
private static String InternalExecutaServico(SoapHttpClientProtocol oServico, TService TipoServico, Object DADOS, Parametro oParam) { try { string dados = XMLUtils.GetXML(DADOS, oParam.versao); #region particularidades if (oParam.UF == TCodUfIBGE.Parana && (DADOS.GetType() == typeof(SchemaXML.NFe_v200.TEnviNFe) || DADOS.GetType() == typeof(SchemaXML.NFe_v300.TEnviNFe) || DADOS.GetType() == typeof(SchemaXML.NFe_v310.TEnviNFe) || DADOS.GetType() == typeof(SchemaXML.NFe_v400.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 (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)) { var wsMethod = Webservices.WSUtils.GetWSMethod(TipoServico); XmlNode ret = (XmlNode)oServico.GetType().InvokeMember(wsMethod, System.Reflection.BindingFlags.InvokeMethod, null, oServico, new object[] { node }); return(XMLUtils.GetXML(ret, oParam.versao)); } else { //TODO : compatibilizar com a nova factory de webservices if (DADOS.GetType() == typeof(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(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(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.conexao == TipoConexao.NFe && 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.conexao == TipoConexao.NFe && 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.conexao == TipoConexao.NFe && 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 override string ToString() { return(_svc.GetType().Name); }