public System.IO.Stream GetManifestResourceStream(IResourceUrl resourceUrl)
 {
     using (var wacth = new CodeWatch("GetManifestResourceStream", 1000, new Action <string, LoggerStrategyBase, int?, long>((tag, currentLog, wcount, execms) => currentLog.LogFormat(LoggerLevels.Warn, "\t{0}:资源({3})请求时间为({1})ms.已超过阀值({2})ms.", tag, execms, wcount, resourceUrl.ManifestResourceName))))
     {
         if (!PlusAssemblysList.Any(p => p.Assembly.FullName == resourceUrl.AssemblyFullName))
         {
             throw new Exception("此插件已移除或者不存在。");
         }
         var ass = PlusAssemblysList.First(p => p.Assembly.FullName == resourceUrl.AssemblyFullName);
         return(ass.Assembly.GetManifestResourceStream(resourceUrl.ManifestResourceName));
     }
 }
Пример #2
0
        /// <summary>
        /// 初始化
        /// </summary>
        public override void Initialize()
        {
            #region 初始化路由
            this.RoutingManager = new RoutingManager();
            this.RoutingManager.Initialize();
            #endregion
            //初始化全局配置
            GlobalConfigurationManager.Config();
            using (var watch = new CodeWatch("Initialize", 20000))
            {
                #region 处理插件
                using (new CodeWatch("LoadPlusAndPlusResource", 5000))
                {
                    var taskDoingList = new List <Task>();
                    #region 【废弃】加载程序集资源
                    //foreach (var plus in PlusManager.InstalledPluginsList)
                    //{
                    //    var loadPlusTask = new Task((plusAss) => CurrentResourceHelper.LoadPlusAndPlusResource((IPlusInfo)plusAss), plus);
                    //    taskDoingList.Add(loadPlusTask);
                    //    loadPlusTask.Start();
                    //}
                    //Task.WaitAll(taskDoingList.ToArray());
                    //taskDoingList.Clear();
                    #endregion

                    #region 【废弃】初始化程序集
                    //foreach (var plus in PlusAssemblysList)
                    //{
                    //    //程序集初始化
                    //    var initTask = new Task((plusInfo) =>
                    //    {
                    //        var plu = (IPlusInfo)plusInfo;
                    //        CurrentResourceHelper.AssemblyInitialize(plu.Assembly, plu.PlusAssemblys);
                    //    }, plus);
                    //    taskDoingList.Add(initTask);
                    //    initTask.Start();
                    //}
                    //Task.WaitAll(taskDoingList.ToArray());
                    //taskDoingList.Clear();
                    #endregion

                    #region 【废弃】执行程序集初始化函数
                    //foreach (var plus in PlusManager.PluginsList)
                    //{
                    //    var loadingTask = new Task((plusInfo) =>
                    //    {
                    //        var plu = (IPlusInfo)plusInfo;
                    //        //执行插件Loading函数
                    //        plu.Assembly.GetTypes().Where(p => p.IsClass && p.GetInterface(typeof(IPlus).FullName) != null).Each(
                    //            t =>
                    //            {
                    //                using (new CodeWatch("Plu Initialize", ApplicationLog, 3000))
                    //                {
                    //                    try
                    //                    {
                    //                        var type = (IPlus)Activator.CreateInstance(t);
                    //                        type.Initialize();
                    //                    }
                    //                    catch (Exception ex)
                    //                    {
                    //                        ApplicationLog.Log(LoggerLevels.Error, string.Format("Assembly:{0},Type:{1}{2}", plu.Assembly.FullName, t.FullName, Environment.NewLine), ex);
                    //                    }
                    //                }
                    //            });
                    //    }, plus);
                    //    taskDoingList.Add(loadingTask);
                    //    loadingTask.Start();
                    //}
                    //Task.WaitAll(taskDoingList.ToArray());
                    //taskDoingList.Clear();
                    #endregion
                }
                #endregion
            }
        }
Пример #3
0
        private void ProcessHander(HttpContext context, IWebHandlerInfo webHandlerInfo)
        {
            using (var codeWatch = new CodeWatch("IJsonHandler ProcessRequest", 2000,
                                                 new Action <string, LoggerStrategyBase, int?, long>(
                                                     (tag, currentLog, wcount, execms) =>
                                                     currentLog.LogFormat(LoggerLevels.Warn, "\t{0}:JSONHandler({3})执行时间为({1})ms.已超过阀值({2})ms.",
                                                                          tag,
                                                                          execms,
                                                                          wcount,
                                                                          context.Request.Url.AbsolutePath))))
            {
                if (WebContext == null)
                {
                    WebContext = new WebContext();
                }
                switch (webHandlerInfo.WebHandlerType)
                {
                case WebHandlerTypes.JSONHandler:
                {
                    var handler    = (IJSONHandler)Activator.CreateInstance(webHandlerInfo.HandlerInstance);
                    var jsonReturn = handler.ProcessJSONRequest(WebContext);
                    if (jsonReturn != null && jsonReturn.IsResponseJsonObject)
                    {
                        context.Response.ContentType = "application/json";
                        //输出JSON对象
                        context.Response.Write(jsonReturn.HasSetJsonObject
                                    ? jsonReturn.JsonObject.ToJson(jsonReturn.JSONCommonFormatHanding)
                                    : new { IsSuccess = true }.ToJson(jsonReturn.JSONCommonFormatHanding));
                    }
                }
                break;

                case WebHandlerTypes.ResourceHandler:
                    break;

                case WebHandlerTypes.WebAPIHandler:
                {
                    context.Response.ContentType = "application/json";
                    var result = new OperationResult()
                    {
                        ResultType = OperationResultType.Success,
                        Message    = "操作成功!"
                    };
                    var handler = (IWebAPI)Activator.CreateInstance(webHandlerInfo.HandlerInstance);
                    handler.OperationResult = result;
                    try
                    {
                        switch (WebContext.HttpContext.Request.HttpMethod)
                        {
                        case "GET":
                        {
                            var paramStrs = WebAPIHelper.GetUrlParams(webHandlerInfo.WebAPIName);
                            if (paramStrs != null && paramStrs.Length > 0)
                            {
                                if (paramStrs.Length > 1)
                                {
                                    result = handler.Get(paramStrs);
                                }
                                else
                                {
                                    result = handler.Get(paramStrs[0]);
                                }
                            }
                            else
                            {
                                result = handler.Get(paramStrs);
                            }
                            //输出JSON对象
                            context.Response.Write(result.Data.ToJsonWithDateFormatyyyyMMddHHmmss());
                            return;
                        }

                        case "POST":
                        {
                            result = handler.Post(WebAPIHelper.GetPostJSON());
                            break;
                        }

                        case "PUT":
                        {
                            var id = WebAPIHelper.GetUrlId(webHandlerInfo.WebAPIName);
                            if (id.IsEmpty())
                            {
                                result.ResultType = OperationResultType.ParamError;
                                result.Message    = "参数错误!";
                                result.LogMessage = "Id不能为空!";
                            }
                            result = handler.Put(id, WebAPIHelper.GetPostJSON());
                            break;
                        }

                        case "DELETE":
                        {
                            var id = WebAPIHelper.GetUrlId(webHandlerInfo.WebAPIName);
                            if (id.IsEmpty())
                            {
                                result.ResultType = OperationResultType.ParamError;
                                result.Message    = "参数错误!";
                                result.LogMessage = "Id不能为空!";
                            }
                            result = handler.Delete(id);
                            break;
                        }

                        default:
                            break;
                        }
                    }
                    catch (NotImplementedException ex)
                    {
                        result.ResultType = OperationResultType.NoImplemented;
                        result.Message    = "该接口尚未实现!";
                        result.LogMessage = "该接口尚未实现!";
                    }
                    catch (Exception ex)
                    {
                        result.ResultType = OperationResultType.Error;
                        result.Message    = "意外错误,请联系管理员!";
                    }

                    //输出JSON对象
                    context.Response.Write(result.ToJsonWithDateFormatyyyyMMddHHmmss());
                }
                break;

                default:
                    break;
                }
            }
        }