/******************************************************************************* * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential * 类的信息: * 1.程序名称:ServiceHostCollection.cs * 2.功能描述:服务集合 * 编辑履历: * 作者 日期 版本 修改内容 * 陈晓野 2014/09/16 1.00 新建 *******************************************************************************/ using System; using Dongke.IBOSS.PRD.Basics.DataAccess; using Dongke.IBOSS.PRD.Basics.Library; using Dongke.IBOSS.PRD.Service.PDAModuleLogic; using Dongke.IBOSS.PRD.WCF.DataModels; namespace Dongke.IBOSS.PRD.WCF.Services { public class ServiceInvoker { #region 服务事件 /// /// 服务开始 /// public static event ServiceDoingEventHandler ServiceDoingEvent; /// /// 服务结束 /// public static event ServiceDoneEventHandler ServiceDoneEvent; /// /// 服务异常 /// public static event ServiceExceptionEventHandler ServiceExceptionEvent; #endregion 服务事件 /// /// 执行 /// /// /// public static void Invoke(object sender, Action serviceInvocation) { ServiceEventArgs eventArgs = new ServiceEventArgs(); eventArgs.Sender = sender; eventArgs.ServiceName = sender.ToString(); eventArgs.MethodName = serviceInvocation.Method.Name; BeginInvoke(eventArgs); try { serviceInvocation(); } catch (Exception ex) { eventArgs.Exception = ex; InvokeException(eventArgs); HandleException(eventArgs); } finally { EndInvoke(eventArgs); } } /// /// 执行 /// /// /// /// /// /// public static TResult Invoke(object sender, Func serviceInvocation) { ServiceEventArgs eventArgs = new ServiceEventArgs(); eventArgs.Sender = sender; eventArgs.ServiceName = sender.ToString(); eventArgs.MethodName = serviceInvocation.Method.Name; BeginInvoke(eventArgs); TResult result = default(TResult); try { result = serviceInvocation(); } catch (Exception ex) { eventArgs.Exception = ex; InvokeException(eventArgs); HandleException(eventArgs); } finally { EndInvoke(eventArgs); } return result; } /// /// 执行 /// /// /// /// /// /// public static ServiceResultEntity Invoke(object sender, Func serviceInvocation) { ServiceEventArgs eventArgs = new ServiceEventArgs(); eventArgs.Sender = sender; eventArgs.ServiceName = sender.ToString(); eventArgs.MethodName = serviceInvocation.Method.Name; BeginInvoke(eventArgs); ServiceResultEntity result = null; try { result = serviceInvocation(); } catch (Exception ex) { eventArgs.Exception = ex; InvokeException(eventArgs); HandleException(eventArgs); //OutputLog.TraceLog(LogPriority.Error, // eventArgs.Sender.ToString(), // eventArgs.MethodName, // eventArgs.Exception.ToString(), // LocalPath.LogExePath); //result = new ServiceResultEntity(); //result.Status = Basics.BaseResources.Constant.ServiceResultStatus.SystemError; //result.Message = ex.ToString(); ////result.Exception = ex; } finally { EndInvoke(eventArgs); } return result; } /// /// 开始执行 /// /// public static void BeginInvoke(ServiceEventArgs eventArgs) { if (ServiceDoingEvent != null) { ServiceDoingEvent(eventArgs.Sender, eventArgs); } } /// /// 执行异常 /// /// public static void InvokeException(ServiceEventArgs eventArgs) { if (ServiceExceptionEvent != null) { ServiceExceptionEvent.BeginInvoke(eventArgs.Sender, eventArgs, null, null); } } /// /// 结束执行 /// /// public static void EndInvoke(ServiceEventArgs eventArgs) { if (ServiceDoneEvent != null) { ServiceDoneEvent.BeginInvoke(eventArgs.Sender, eventArgs, null, null); } } /// /// 异常处理 /// /// public static void HandleException(ServiceEventArgs ex) { string em = ex.Exception.Message; if (em.Contains("LoginInfoError") || em.Contains("RepeatLogin") || em.Contains("LicInfoError") ) { throw new Exception(ex.MethodName, ex.Exception); } //LogFileOperation.Error(DataManager.LogFileName, ex.MethodName + " " + ex.Exception.Message); string userInfo = null; if (ex.Sender is ServicesBase) { ServicesBase sb = ex.Sender as ServicesBase; if (sb != null) { if (sb.SUserInfo != null) { userInfo = JsonHelper.ToJson(sb.SUserInfo) + System.Environment.NewLine; } } } OutputLog.TraceLog(LogPriority.Error, ex.Sender.ToString(), userInfo + ex.MethodName, ex.Exception.ToString(), LocalPath.LogExePath); // TODO 异常处理 throw new Exception(ex.MethodName, ex.Exception); } } }