private void RefObject(APIDicEnitity _APIDicEnitity) { string AssemblyPath = _APIDicEnitity.API_Path;//dll文件路径,不包含dll文件名称 //.或..表示根目录 //都替换成 / \替换成/ AssemblyPath = AssemblyPath.Replace(@"//", @"\"); AssemblyPath = AssemblyPath.Replace(@"/", @"\"); var _pathArray = AssemblyPath.Split('\\'); if ((_pathArray[0] == ".") || (_pathArray[0] == "..")) { AssemblyPath = AssemblyPath.Replace(@".\", ""); AssemblyPath = AssemblyPath.Replace(@"..\", ""); if ((!string.IsNullOrEmpty(AssemblyPath)) && (AssemblyPath.Rigth(1) != @"\")) { AssemblyPath = AssemblyPath + @"\"; } AssemblyPath = HttpRuntime.BinDirectory + AssemblyPath; } if (string.IsNullOrEmpty(AssemblyPath)) { AssemblyPath = HttpRuntime.BinDirectory + AssemblyPath; } string AssemblyDllPath = AssemblyPath + _APIDicEnitity.API_Assemble;//dll文件全路径,包含后缀名 if (!System.IO.File.Exists(AssemblyDllPath)) { throw new Exception("文件" + AssemblyDllPath + "不存在.."); //文件不存在,加载失败 } //Assembly assembly = Assembly.Load(AssemblyDllPath);//加载dll文件 Assembly assembly = Assembly.LoadFrom(AssemblyDllPath);//加载dll文件 string AssemblyClass = _APIDicEnitity.API_NameSpace + "." + _APIDicEnitity.API_ClassName; Type type = assembly.GetType(AssemblyClass);//获取类型 if (null == type) { throw new Exception("未找到类型:" + AssemblyClass); } object oObject = Activator.CreateInstance(type);//创建实例 if (null == oObject) { throw new Exception("创建类型:" + type.ToString() + "的实例失败"); } MethodInfo _MethodInfo = type.GetMethod(_APIDicEnitity.API_FunctionName);//获取方法(函数) if (_MethodInfo == null) { throw new Exception("未找到方法:" + _APIDicEnitity.API_FunctionName); } APISUpLoad.UpDataInstanceAndMethod(_APIDicEnitity.API_SerialKey, _MethodInfo, oObject); }
public string CallBackEnd(string APISerialKey, string inParamXML) { try { APIDicEnitity _APIDicEnitity = APISUpLoad.GetAPIDicEnitity(APISerialKey); if (null == _APIDicEnitity) //不存在,到数据库中去加载 { if (APISUpLoad.AddAPIDicEnititysByKey(APISerialKey)) //从数据库中加载成功 { //加载成功后,需要通过反射来加载方法 RefObject(_APIDicEnitity); //调用方法 var _paramArray = _APIDicEnitity.API_Method.GetParameters(); switch (_paramArray.Length) { case 0: return(_APIDicEnitity.API_Method.Invoke(_APIDicEnitity.API_Instance, null) as string); case 1: return(_APIDicEnitity.API_Method.Invoke(_APIDicEnitity.API_Instance, new object[] { inParamXML }) as string); default: Exception _ex = new Exception("调用的函数参数最多只能有1个,请前去确认..."); return(CreateRetValEntity(_ex)); } } else//从数据库中加载失败,报错 { Exception _ex = new Exception("您输入的APISerialKey:" + APISerialKey + "未维护或者为启用,请前去确认..."); return(CreateRetValEntity(_ex)); } } else//存在 { if ((_APIDicEnitity.API_Instance == null) || (_APIDicEnitity.API_Method == null)) { //APISerialKey 已经存在,但是是第一次调用,那么就需要反射 RefObject(_APIDicEnitity); //调用方法 var _paramArray = _APIDicEnitity.API_Method.GetParameters(); switch (_paramArray.Length) { case 0: return(_APIDicEnitity.API_Method.Invoke(_APIDicEnitity.API_Instance, null) as string); case 1: return(_APIDicEnitity.API_Method.Invoke(_APIDicEnitity.API_Instance, new object[] { inParamXML }) as string); default: Exception _ex = new Exception("调用的函数参数最多只能有1个,请前去确认..."); return(CreateRetValEntity(_ex)); } } else { //APISerialKey 已经存在,是第二次以上调用 var _paramArray = _APIDicEnitity.API_Method.GetParameters(); switch (_paramArray.Length) { case 0: return(_APIDicEnitity.API_Method.Invoke(_APIDicEnitity.API_Instance, null) as string); case 1: return(_APIDicEnitity.API_Method.Invoke(_APIDicEnitity.API_Instance, new object[] { inParamXML }) as string); default: Exception _ex = new Exception("调用的函数参数最多只能有1个,请前去确认..."); return(CreateRetValEntity(_ex)); } } } } catch (Exception ex) { return(CreateRetValEntity(ex)); } }