示例#1
0
        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);
        }
示例#2
0
        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));
            }
        }