/// <summary> /// Genera un log de tipo "Warning" cuando se ha intentado ejecutar /// un servicio que está deshabilitado. /// </summary> /// <param name="pConfig">configuración del servicio.</param> /// <param name="pServiceError">pServiceError </param> internal static void LogNotAvailableExcecution(ServiceConfiguration pConfig, out ServiceError pServiceError) { pServiceError = new ServiceError(); StringBuilder s = new StringBuilder(); s.AppendLine("Se ha intentado ejecutar un servicio que está configurado como no disponible."); s.AppendLine("Service :"); s.AppendLine(pConfig.Handler); pServiceError.Type = FwkExceptionTypes.TechnicalException.ToString(); pServiceError.Message = s.ToString(); pServiceError.ErrorId = "7006"; pServiceError.Assembly = "Fwk.BusinessFacades"; pServiceError.Class = "Audit"; pServiceError.Namespace = "Fwk.BusinessFacades"; pServiceError.UserName = Environment.UserName; pServiceError.Machine = Environment.MachineName; try { /// TODO: ver prefijo del log Event ev = new Event(EventType.Error,Fwk.Bases.ConfigurationsHelper.HostApplicationName, pServiceError.GetXml(), pServiceError.Machine, pServiceError.UserName); Fwk.Logging.StaticLogger.Log(ev); } catch { } }
/// <summary> /// /// </summary> /// <param name="pWebException"></param> /// <param name="pURL"></param> /// <returns>ServiceError <see cref="ServiceError"/></returns> private static ServiceError ProcessWebException(WebException pWebException, String pURL) { ServiceError wServiceError = new ServiceError(); StringBuilder wMessage = new StringBuilder(); wMessage.AppendLine("Ocurrio un problema al intentar conectarce al Servicio Web. " + GetGenericStatusCode(pWebException)); wMessage.AppendLine("Verifique en el archivo de configuración si la direccion url del servicio es correcta"); wMessage.AppendLine("y de ser asi si el servicio esta activo o el host donde esta alojado el IIS funciona correctamente"); wMessage.AppendLine("--------------------------------------------------------------------------"); wMessage.Append("URL : "); wMessage.AppendLine(pURL); wMessage.AppendLine(); wMessage.AppendLine(pWebException.Message); wMessage.AppendLine("Verifique el código de estado mostrado arriba para revelar "); wMessage.AppendLine("la razón exacta por la que una solicitud no se realiza correctamente en el siguiente enlace: "); wMessage.AppendLine("http://support.microsoft.com/kb/318380/es"); wServiceError.Message = wMessage.ToString(); if (pWebException.InnerException != null) wServiceError.InnerMessageException = Fwk.Exceptions.ExceptionHelper.GetAllMessageException(pWebException.InnerException); wMessage = null; return wServiceError; }
/// <summary> /// /// </summary> /// <param name="configurationErrorsException"></param> /// <returns>ServiceError <see cref="ServiceError"/></returns> private static ServiceError ProcessConfigurationException(System.Configuration.ConfigurationException configurationErrorsException) { ServiceError wServiceError = new ServiceError(); StringBuilder wMessage = new StringBuilder(); wMessage.AppendLine("Ocurrio un problema al intentar obtener la confuguracion del cliente al conectarce al Servicio Web. "); wMessage.AppendLine("Verifique si esta bien formado el archivo de configuracion AppConfig y si contiene la seccion que configura el Wrapper"); wMessage.AppendLine(); wMessage.AppendLine("Mensaje Web: "); wMessage.AppendLine(configurationErrorsException.Message); wServiceError.StackTrace = configurationErrorsException.StackTrace; wServiceError.Message = wMessage.ToString(); if (configurationErrorsException.InnerException != null) wServiceError.InnerMessageException = Fwk.Exceptions.ExceptionHelper.GetAllMessageException(configurationErrorsException.InnerException); wMessage = null; return wServiceError; }
/// <summary> /// Procesa las exepciones tipo SoapException <see cref="System.Web.Services.Protocols.SoapException"/> /// </summary> /// <param name="soapException">SoapException <see cref="System.Web.Services.Protocols.SoapException"/></param> /// <returns>ServiceError <see cref="ServiceError"/></returns> private static ServiceError ProcessSoapException(System.Web.Services.Protocols.SoapException soapException) { ServiceError wServiceError = new ServiceError(); StringBuilder wMessage = new StringBuilder(); wMessage.AppendLine("Ocurrio un problema al intentar ejecutar un servicio."); wMessage.AppendLine("Verifique que el despachador de servicio se encuentre actualizado con las ultimas librerias del Framework ."); wMessage.AppendLine(); wMessage.AppendLine("Mensaje SOAP: "); wMessage.AppendLine(soapException.Message); wServiceError.StackTrace= soapException.StackTrace; wServiceError.Message = wMessage.ToString(); if (soapException.InnerException != null) wServiceError.InnerMessageException = Fwk.Exceptions.ExceptionHelper.GetAllMessageException(soapException.InnerException); wMessage = null; return wServiceError; }
/// <summary> /// Procesa las exepciones no detectadas <see cref="System.Web.Services.Protocols.SoapException"/> /// </summary> /// <param name="pException">Exception por defecto producida <see cref="System.Web.Services.Protocols.SoapException"/></param> /// <returns>ServiceError <see cref="ServiceError"/></returns> private static ServiceError ProcessDefaultException(Exception pException) { ServiceError wServiceError = new ServiceError(); StringBuilder wMessage = new StringBuilder(); wMessage.AppendLine("Ocurrio un problema al intentar ejecutar un servicio."); wMessage.AppendLine(); wMessage.AppendLine("Mensaje: "); wMessage.AppendLine(pException.Message); wServiceError.StackTrace = pException.StackTrace; wServiceError.Message = wMessage.ToString(); wServiceError.ErrorId = "6000"; if (pException.InnerException != null) wServiceError.InnerMessageException = Fwk.Exceptions.ExceptionHelper.GetAllMessageException(pException.InnerException); wMessage = null; return wServiceError; }
/// <summary> /// Completa el error del que va dentro del Request con informacion de : /// Assembly, Class, Namespace, UserName, InnerException, etc /// </summary> /// <param name="pServiceError"></param> /// <param name="pException"></param> static void FillServiceError(ServiceError pServiceError, Exception pException) { if (ExceptionHelper.GetFwkExceptionTypes(pException) != FwkExceptionTypes.OtherException) pServiceError.Type = ExceptionHelper.GetFwkExceptionTypesName(pException); else pServiceError.Type = pException.GetType().Name; pServiceError.UserName = Environment.UserName; pServiceError.Machine = Environment.MachineName; if (string.IsNullOrEmpty(ConfigurationsHelper.HostApplicationName)) pServiceError.Source = "Despachador de servicios en " + Environment.MachineName; else pServiceError.Source = ConfigurationsHelper.HostApplicationName; //if (pException.InnerException != null) pServiceError.InnerMessageException = Fwk.Exceptions.ExceptionHelper.GetAllMessageException(pException); }
/// <summary> /// Ejecuta el servicio de negocio. /// </summary> /// <param name="pData">XML con datos de entrada.</param> /// <param name="pServiceConfiguration">configuración del servicio.</param> /// <param name="pserviError"></param> /// <returns>XML que representa el resultado de la ejecución del servicio.</returns> /// <date>2007-08-07T00:00:00</date> /// <author>moviedo</author> static string RunService(string pData, ServiceConfiguration pServiceConfiguration, out ServiceError pserviError) { IServiceContract wRequest = null; IServiceContract wResponse = null; // Obtencion del Request. wRequest = (IServiceContract)ReflectionFunctions.CreateInstance(pServiceConfiguration.Request); if (wRequest == null) { System.Text.StringBuilder wMessage = new StringBuilder(); wMessage.Append("Verifique que este assemblie se encuentra en el host del despachador de servicios"); wMessage.Append("El servicio " + pServiceConfiguration.Handler); wMessage.AppendLine(" no se puede ejecutar debido a que esta faltando el assembly "); wMessage.Append(pServiceConfiguration.Request); wMessage.Append(" en el despachador de servicio"); throw GetTechnicalException(wMessage.ToString(), "7002", null); } wRequest.SetXml(pData); wRequest.InitializeServerContextInformation(); wResponse = RunService(wRequest, pServiceConfiguration, out pserviError); return wResponse.GetXml(); }
static ServiceError GetServiceError(Exception e) { ServiceError err = null; if ((e is TechnicalException)) { TechnicalException tx = (TechnicalException)e; err = new ServiceError(); err.ErrorId = tx.ErrorId; err.Message = tx.Message; err.Source = tx.Source; FillServiceError(err, tx); } if ((e is FunctionalException)) { FunctionalException fx = (FunctionalException)e; err = new ServiceError(); err.ErrorId = fx.ErrorId; err.Message = fx.Message; err.Source = fx.Source; err.Severity = Enum.GetName(typeof(FunctionalException.ExceptionSeverity), fx.Severity); FillServiceError(err, fx); } //if (e is System.TypeLoadException) //{ // System.Text.StringBuilder wMessage = new StringBuilder(); // err = new ServiceError(); // err.ErrorId = "7002"; // wMessage.Append("No se encuentra el o los assemblies para cargar el servicio " + pServiceConfiguration.Name); // wMessage.AppendLine(); // wMessage.AppendLine(e.Message); // err.Message = wMessage.ToString(); // FillServiceError(err, e); //} if (err == null) { err = new ServiceError(); if (e.InnerException != null) e = e.InnerException; err.Message = e.Message; FillServiceError(err, e); } return err; }
/// <summary> /// Ejecuta el servicio de negocio. /// </summary> /// <param name="pRequest">Request de entrada que se pasa al servicio</param> /// <param name="pServiceConfiguration">configuración del servicio.</param> /// <param name="pserviError">serviError</param> /// <returns>XML que representa el resultado de la ejecución del servicio.</returns> /// <date>2007-08-07T00:00:00</date> /// <author>moviedo</author> static IServiceContract RunService(IServiceContract pRequest, ServiceConfiguration pServiceConfiguration, out ServiceError pserviError) { IServiceContract wResponse = null; try { pRequest.InitializeServerContextInformation(); // obtención del Response. Type wServiceType = ReflectionFunctions.CreateType(pServiceConfiguration.Handler); object wServiceInstance = Activator.CreateInstance(wServiceType); wResponse = (wServiceType.GetMethod("Execute").Invoke(wServiceInstance, new object[] { pRequest }) as IServiceContract); wResponse.InitializeServerContextInformation(); } #region [manage Exception] catch (System.IO.FileNotFoundException ex) { wResponse = GetResponse(pServiceConfiguration);// (IServiceContract)ReflectionFunctions.CreateInstance(pServiceConfiguration.Response); wResponse.Error = new ServiceError(); System.Text.StringBuilder wMessage = new StringBuilder(); wResponse.Error.ErrorId = "7003"; #region Message wMessage.Append("El despachador de servicio no pudo encontrar alguna de los siguientes assemblies \r\n"); wMessage.Append("o alguna de sus dependencias: \r\n"); wMessage.Append("Servicio: "); wMessage.Append(pServiceConfiguration.Handler); wMessage.Append(Environment.NewLine); wMessage.Append("Request: "); wMessage.Append(pServiceConfiguration.Request); wMessage.Append(Environment.NewLine); wMessage.Append("Response: "); wMessage.Append(pServiceConfiguration.Response); wMessage.Append(Environment.NewLine); wMessage.Append("Mensaje original :"); wMessage.Append(Environment.NewLine); wMessage.Append(ex.Message); #endregion wResponse.Error.Message = wMessage.ToString(); FillServiceError(wResponse.Error, ex); } catch (System.Reflection.TargetInvocationException ex) { wResponse = GetResponse(pServiceConfiguration); wResponse.Error = GetServiceError(ex.InnerException); } catch (TypeLoadException tl) { wResponse = GetResponse(pServiceConfiguration); System.Text.StringBuilder wMessage = new StringBuilder(); wResponse.Error = new ServiceError(); wResponse.Error.ErrorId = "7002"; wMessage.Append("No se encuentra el o los assemblies para cargar el servicio " + pServiceConfiguration.Name); wMessage.AppendLine(); wMessage.AppendLine(tl.Message); wResponse.Error.Message = wMessage.ToString(); FillServiceError(wResponse.Error, tl); } catch (Exception ex) { wResponse = GetResponse(pServiceConfiguration);// (IServiceContract)ReflectionFunctions.CreateInstance(pServiceConfiguration.Response); wResponse.Error = GetServiceError(ex); } #endregion pserviError = wResponse.Error; #region < Log > //Audito ensegundo plano Action actionAudit = () => { DoAudit(pServiceConfiguration, pRequest, wResponse); }; Task.Factory.StartNew(actionAudit); #endregion return wResponse; }