///////////////////////////////////////////////////////////////// // // (C) Copyright 2013, Kenneth, Inc. // All rights reserved. Confidential. Except as pursuant // to a written agreement with Kenneth, this software may // not be used or distributed. This software may be covered // by one or more patents. // // 本软件为Kenneth开发,版权所有,违者必究,320325198102218110 // ///////////////////////////////////////////////////////////////// using System; using System.Collections.Generic; using System.Text; using System.Reflection; using Newtonsoft.Json; namespace GummingCommon { /// /// 后台服务调度引擎 /// public sealed class ServiceEngine { /// /// /// /// /// public static string DealErrorInfo(string errorCode) { OutEntity oe = new OutEntity() { ErrorCode = errorCode }; return JsonConvert.SerializeObject(oe); } private static object InvokeMethodBase(string assemblyName, string classType, string methodName, string currentUserId, string currentClientId, object currentSendParameter, Type paratype) { object outEntity = null; //加载 Assembly Assembly assembly = null; if (assemblyName != "") { try { assembly = Assembly.Load(assemblyName); } catch (Exception ep) { throw new Exception(ErrorCode.LoadAssemblyError, ep); } } else { return DealErrorInfo(ErrorCode.LoadAssemblyConfigError); } if (assembly == null) { return DealErrorInfo(ErrorCode.LoadAssemblyConfigError); } //加载类型 Type type = null; if (classType != "") { try { type = assembly.GetType(classType); } catch (Exception ep) { throw new Exception(ErrorCode.GetAssemblyTypeError, ep); } } else { return DealErrorInfo(ErrorCode.GetAssemblyTypeConfigError); } if (type == null) { return DealErrorInfo(ErrorCode.GetAssemblyTypeConfigError); } //加载类型 MethodInfo methodInfo = null; if (methodName != "") { try { Type[] typeArray = new Type[3]; typeArray.SetValue(typeof(string), 0); typeArray.SetValue(typeof(string), 1); typeArray.SetValue(paratype, 2); methodInfo = type.GetMethod(methodName, typeArray); } catch (Exception ep) { throw new Exception(ErrorCode.GetAssemblyMethodError, ep); } } else { return DealErrorInfo(ErrorCode.GetAssemblyMethodConfigError); } if (methodInfo == null) { return DealErrorInfo(ErrorCode.GetAssemblyMethodConfigError); } //产生实例 Object objectInstance = null; if (classType != "") { try { objectInstance = assembly.CreateInstance(classType); } catch (Exception ep) { throw new Exception(ErrorCode.CreateInstanceError, ep); } } else { return DealErrorInfo(ErrorCode.CreateInstanceConfigError); } if (objectInstance == null) { return DealErrorInfo(ErrorCode.CreateInstanceConfigError); } //调用方法 try { object[] objectParameters = new object[] { currentUserId, currentClientId, currentSendParameter }; outEntity = methodInfo.Invoke(objectInstance, objectParameters); } catch (Exception ep) { throw new Exception(ErrorCode.InvokeMethodError, ep.InnerException); } return outEntity; } /// /// /// /// /// public static string InvokeMethod(string assemblyName, string classType, string methodName, string currentUserId, string currentClientId, string currentSendParameter) { return (string)InvokeMethodBase(assemblyName, classType, methodName, currentUserId, currentClientId, currentSendParameter, typeof(string)); } public static string WriteFile(string assemblyName, string classType, string methodName, string currentUserId, string currentClientId, TestphotofilesEntity file) { return (string)InvokeMethodBase(assemblyName, classType, methodName, currentUserId, currentClientId, file, typeof(TestphotofilesEntity)); } public static byte[] ReadFile(string assemblyName, string classType, string methodName, string currentUserId, string currentClientId, string recid) { return (byte[])InvokeMethodBase(assemblyName, classType, methodName, currentUserId, currentClientId, recid, typeof(string)); } } }