コード例 #1
0
        public ActionResult Index()
        {
            Func <string, FileVersionInfo> getFileVersionInfo = dllFileName =>
            {
                var dllPath =
                    Senparc.Weixin.MP.Sample.CommonService.Utilities.Server.GetMapPath(
                        System.IO.Path.Combine(AppContext.BaseDirectory, dllFileName)); //dll所在目录
                return(FileVersionInfo.GetVersionInfo(dllPath));
            };

            Func <FileVersionInfo, string> getDisplayVersion = fileVersionInfo =>
                                                               Regex.Match(fileVersionInfo.FileVersion, @"\d+\.\d+\.\d+").Value;

            TempData["WeixinVersion"]    = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.dll"));
            TempData["MpVersion"]        = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.MP.dll"));
            TempData["ExtensionVersion"] = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.MP.MvcExtension.dll"));
            TempData["OpenVersion"]      = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.Open.dll"));
            //TempData["QYVersion"] = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.QY.dll"));//已经停止更新
            TempData["WorkVersion"]           = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.Work.dll"));
            TempData["RedisCacheVersion"]     = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.Cache.Redis.dll"));
            TempData["MemcachedCacheVersion"] = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.Cache.Memcached.dll"));
            TempData["WxOpenVersion"]         = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.WxOpen.dll"));
            TempData["WebSocketVersion"]      = getDisplayVersion(getFileVersionInfo("Senparc.WebSocket.dll"));

            //缓存
            //var containerCacheStrategy  = CacheStrategyFactory.GetContainerCacheStrategyInstance();
            var containerCacheStrategy = ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance() /*.ContainerCacheStrategy*/;

            TempData["CacheStrategy"] = containerCacheStrategy.GetType().Name.Replace("ContainerCacheStrategy", "");

            //文档下载版本
            var configHelper = new ConfigHelper(this.HttpContext);
            var config       = configHelper.GetConfig();

            TempData["NewestDocumentVersion"] = config.Versions.First();

            Weixin.WeixinTrace.SendCustomLog("首页被访问",
                                             string.Format("Url:{0}\r\nIP:{1}", Request.Host, HttpContext.Connection.RemoteIpAddress));
            //or use Header: REMOTE_ADDR

            return(View());
        }
コード例 #2
0
        public ActionResult Index()
        {
            Func <Version, string> getDisplayVersion = version =>
                                                       Regex.Match(version.ToString(), @"\d+\.\d+\.\d+").Value;

            Func <Type, string> getTypeVersionInfo = type =>
            {
                var version = System.Reflection.Assembly.GetAssembly(type).GetName().Version;
                return(getDisplayVersion(version));
            };

            TempData["CO2NETVersion"]    = getTypeVersionInfo(typeof(CO2NET.Config));
            TempData["WeixinVersion"]    = getTypeVersionInfo(typeof(Senparc.Weixin.Config));
            TempData["TenPayVersion"]    = getTypeVersionInfo(typeof(Senparc.Weixin.TenPay.Register));                          //DPBMARK TenPay DPBMARK_END
            TempData["MpVersion"]        = getTypeVersionInfo(typeof(Senparc.Weixin.MP.Register));                              //DPBMARK MP DPBMARK_END
            TempData["ExtensionVersion"] = getTypeVersionInfo(typeof(Senparc.Weixin.MP.MvcExtension.FixWeixinBugWeixinResult)); //DPBMARK MP DPBMARK_END
            TempData["OpenVersion"]      = getTypeVersionInfo(typeof(Senparc.Weixin.Open.Register));                            //DPBMARK Open DPBMARK_END
            //TempData["QYVersion"] = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.QY.dll"));//已经停止更新
            TempData["WorkVersion"]           = getTypeVersionInfo(typeof(Senparc.Weixin.Work.Register));                       //DPBMARK Work DPBMARK_END
            TempData["RedisCacheVersion"]     = getTypeVersionInfo(typeof(Senparc.Weixin.Cache.Redis.Register));                //DPBMARK Redis DPBMARK_END
            TempData["MemcachedCacheVersion"] = getTypeVersionInfo(typeof(Senparc.Weixin.Cache.Memcached.Register));            //DPBMARK Memcached DPBMARK_END
            TempData["WxOpenVersion"]         = getTypeVersionInfo(typeof(Senparc.Weixin.WxOpen.Register));                     //DPBMARK MiniProgram DPBMARK_END
            TempData["WebSocketVersion"]      = getTypeVersionInfo(typeof(Senparc.WebSocket.WebSocketConfig));                  //DPBMARK WebSocket DPBMARK_END

            //缓存
            //var containerCacheStrategy  = CacheStrategyFactory.GetContainerCacheStrategyInstance();
            var containerCacheStrategy = ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance() /*.ContainerCacheStrategy*/;

            TempData["CacheStrategy"] = containerCacheStrategy.GetType().Name.Replace("ContainerCacheStrategy", "");

            //文档下载版本
            var configHelper = new ConfigHelper(this.HttpContext);
            var config       = configHelper.GetConfig();

            TempData["NewestDocumentVersion"] = config.Versions.First();

            Weixin.WeixinTrace.SendCustomLog("首页被访问",
                                             string.Format("Url:{0}\r\nIP:{1}", Request.Host, HttpContext.Connection.RemoteIpAddress));
            //or use Header: REMOTE_ADDR

            return(View());
        }
コード例 #3
0
        public ActionResult Index()
        {
            Func <Version, string> getDisplayVersion = version =>
                                                       Regex.Match(version.ToString(), @"\d+\.\d+\.\d+").Value;

            Func <Type, string> getTypeVersionInfo = type =>
            {
                var version = System.Reflection.Assembly.GetAssembly(type).GetName().Version;
                return(getDisplayVersion(version));
            };

            TempData["SampleVersion"]  = getTypeVersionInfo(this.GetType());                      //当前Demo的版本号
            TempData["CO2NETVersion"]  = getTypeVersionInfo(typeof(Senparc.CO2NET.Config));       //CO2NET版本号
            TempData["NeuCharVersion"] = getTypeVersionInfo(typeof(Senparc.NeuChar.ApiBindInfo)); //NeuChar版本号

            TempData["WeixinVersion"]    = getTypeVersionInfo(typeof(Senparc.Weixin.Config));
            TempData["TenPayVersion"]    = getTypeVersionInfo(typeof(Senparc.Weixin.TenPay.Register));                          //DPBMARK TenPay DPBMARK_END
            TempData["MpVersion"]        = getTypeVersionInfo(typeof(Senparc.Weixin.MP.Register));                              //DPBMARK MP DPBMARK_END
            TempData["ExtensionVersion"] = getTypeVersionInfo(typeof(Senparc.Weixin.MP.MvcExtension.FixWeixinBugWeixinResult)); //DPBMARK MP DPBMARK_END
            //TempData["QYVersion"] = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.QY.dll"));//已经停止更新
            TempData["RedisCacheVersion"] = getTypeVersionInfo(typeof(Senparc.Weixin.Cache.Redis.Register));                    //DPBMARK Redis DPBMARK_END

            //缓存
            //var containerCacheStrategy  = CacheStrategyFactory.GetContainerCacheStrategyInstance();
            var containerCacheStrategy = ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance() /*.ContainerCacheStrategy*/;

            TempData["CacheStrategy"] = containerCacheStrategy.GetType().Name.Replace("ContainerCacheStrategy", "");

            //文档下载版本
            var configHelper = new ConfigHelper();
            var config       = configHelper.GetConfig();

            TempData["NewestDocumentVersion"] = config.Versions.First();

            Senparc.Weixin.WeixinTrace.SendCustomLog("首页被访问", string.Format("Url:{0}\r\nIP:{1}", Request.Url, Request.UserHostName));

            //获取编译时间
            TempData["BuildTime"] = System.IO.File.GetLastWriteTime(this.GetType().Assembly.Location).ToString("yyyyMMdd.HH.mm");

            return(View());
        }
コード例 #4
0
        public ActionResult RunTest()
        {
            var sb = new StringBuilder();
            //var containerCacheStrategy = CacheStrategyFactory.GetContainerCacheStrategyInstance();
            var containerCacheStrategy = ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance() /*.ContainerCacheStrategy*/;
            var baseCacheStrategy      = containerCacheStrategy.BaseCacheStrategy();

            sb.AppendFormat("{0}:{1}<br />", "当前缓存策略", containerCacheStrategy.GetType().Name);

            var finalExisted = false;

            for (int i = 0; i < 3; i++)
            {
                sb.AppendFormat("<br />====== {0}:{1} ======<br /><br />", "开始一轮测试", i + 1);
                var shortBagKey = SystemTime.Now.ToString("yyyyMMdd-HHmmss");
                var finalBagKey = baseCacheStrategy.GetFinalKey(ContainerHelper.GetItemCacheKey(typeof(TestContainerBag1), shortBagKey));//获取最终缓存中的键
                var bag         = new TestContainerBag1()
                {
                    Key      = shortBagKey,
                    DateTime = SystemTime.Now
                };
                TestContainer1.Update(shortBagKey, bag, TimeSpan.FromHours(1)); //更新到缓存(立即更新)
                sb.AppendFormat("{0}:{1}<br />", "bag.DateTime", bag.DateTime.ToString("o"));

                Thread.Sleep(1);

                bag.DateTime = SystemTime.Now; //进行修改

                //读取队列
                var mq     = new SenparcMessageQueue();
                var mqKey  = SenparcMessageQueue.GenerateKey("ContainerBag", bag.GetType(), bag.Key, "UpdateContainerBag");
                var mqItem = mq.GetItem(mqKey);
                sb.AppendFormat("{0}:{1}<br />", "bag.DateTime", bag.DateTime.ToString("o"));
                sb.AppendFormat("{0}:{1}<br />", "已经加入队列", mqItem != null);
                sb.AppendFormat("{0}:{1}<br />", "当前消息队列数量(未更新缓存)", mq.GetCount());

                if (mq.GetCount() >= 3)
                {
                    //超过3是不正常的,或有其他外部干扰
                    sb.AppendFormat("<br>=====MQ队列({0})start=======<br>", mq.GetCount());
                    foreach (var item in SenparcMessageQueue.MessageQueueDictionary)
                    {
                        sb.AppendFormat("{0}:{1}<br />", item.Key, item.Value.Key);
                    }

                    sb.AppendFormat("=====MQ队列({0})=======<br><br>", mq.GetCount());
                }

                var itemCollection = containerCacheStrategy.GetAll <TestContainerBag1>();

                var existed = itemCollection.ContainsKey(finalBagKey);
                sb.AppendFormat("{0}:{1}<br />", "当前缓存是否存在", existed);
                sb.AppendFormat("{0}:{1}<br />", "插入缓存时间",
                                !existed ? "不存在" : itemCollection[finalBagKey].CacheTime.ToString("o")); //应为0

                var waitSeconds = i;
                sb.AppendFormat("{0}:{1}<br />", "操作", "等待" + waitSeconds + "秒");
                Thread.Sleep(waitSeconds * 1000); //队列线程默认轮询等待时间为1秒,当等待时间超过1秒时,应该都已经处理完毕

                sb.AppendFormat("{0}:{1}<br />", "当前消息队列数量(未更新缓存)", mq.GetCount());

                itemCollection = containerCacheStrategy.GetAll <TestContainerBag1>();
                existed        = itemCollection.ContainsKey(finalBagKey);
                finalExisted   = existed && itemCollection[finalBagKey].CacheTime.Date == SystemTime.Now.Date;
                sb.AppendFormat("{0}:{1}<br />", "当前缓存是否存在", existed);
                sb.AppendFormat("{0}:{1}<br />", "插入缓存时间",
                                !existed ? "不存在" : itemCollection[finalBagKey].CacheTime.ToString("o")); //应为当前加入到缓存的最新时间
            }

            sb.AppendFormat("<br />============<br /><br />");
            sb.AppendFormat("{0}:{1}<br />", "测试结果", !finalExisted ? "失败" : "成功");

            return(Content(sb.ToString()));
            //ViewData["Result"] = sb.ToString();
            //return View();
        }
コード例 #5
0
        public IActionResult Index()
        {
            #region  序集信息

            var vd = new Home_IndexVD()
            {
                AssemblyModelCollection = new Dictionary <Home_IndexVD_GroupInfo, List <Home_IndexVD_AssemblyModel> >()
            };

            //Senparc.Weixin SDK
            var sdkGitHubUrl = "https://github.com/JeffreySu/WeiXinMPSDK";
            var sdkGroup     = new Home_IndexVD_GroupInfo()
            {
                Title       = "Senparc.Weixin SDK",
                Description = "对应于每一个微信平台的基础 SDK,包含了目前微信平台的绝大部分 API,进行微信开发重点是对这些库的使用。"
            };
            var sdkList = new List <Home_IndexVD_AssemblyModel>();
            sdkList.Add(new Home_IndexVD_AssemblyModel("SDK 公共基础库", "Senparc.Weixin", typeof(Senparc.Weixin.WeixinRegister), gitHubUrl: sdkGitHubUrl));
            sdkList.Add(new Home_IndexVD_AssemblyModel("公众号<br />JSSDK<br />摇一摇周边", "Senparc.Weixin.MP", typeof(Senparc.Weixin.MP.Register), gitHubUrl: sdkGitHubUrl));                                              //DPBMARK MP DPBMARK_END
            sdkList.Add(new Home_IndexVD_AssemblyModel("公众号MvcExtension", "Senparc.Weixin.MP.MvcExtension", typeof(Senparc.Weixin.MP.MvcExtension.WeixinResult), "Senparc.Weixin.MP.Mvc", gitHubUrl: sdkGitHubUrl)); //DPBMARK MP DPBMARK_END
            sdkList.Add(new Home_IndexVD_AssemblyModel("小程序", "Senparc.Weixin.WxOpen", typeof(Senparc.Weixin.WxOpen.Register), gitHubUrl: sdkGitHubUrl));                                                            //DPBMARK MiniProgram DPBMARK_END
            sdkList.Add(new Home_IndexVD_AssemblyModel("微信支付", "Senparc.Weixin.TenPay", typeof(Senparc.Weixin.TenPay.Register), gitHubUrl: sdkGitHubUrl));                                                           //DPBMARK TenPay DPBMARK_END
            sdkList.Add(new Home_IndexVD_AssemblyModel("微信支付V3(新)", "Senparc.Weixin.TenPayV3", typeof(Senparc.Weixin.TenPayV3.Register), supportNet45: false, gitHubUrl: sdkGitHubUrl));                             //DPBMARK TenPay DPBMARK_END
            sdkList.Add(new Home_IndexVD_AssemblyModel("开放平台", "Senparc.Weixin.Open", typeof(Senparc.Weixin.Open.Register), gitHubUrl: sdkGitHubUrl));                                                               //DPBMARK Open DPBMARK_END
            //TempData["QYVersion"] = getDisplayVersion(getFileVersionInfo("Senparc.Weixin.QY.dll"));//已经停止更新
            sdkList.Add(new Home_IndexVD_AssemblyModel("企业微信", "Senparc.Weixin.Work", typeof(Senparc.Weixin.Work.Register), gitHubUrl: sdkGitHubUrl));                                                               //DPBMARK Work DPBMARK_END
            vd.AssemblyModelCollection[sdkGroup] = sdkList;


            var aspnetGroup = new Home_IndexVD_GroupInfo()
            {
                Title       = "Senparc.Weixin SDK 的 ASP.NET 运行时基础库",
                Description = "这些库基于 ASP.NET 运行时,依赖 ASP.NET 一些特性完成一系列基于 ASP.NET 及 ASP.NET Core 的操作。<br />" +
                              "分离出这些库的另外一个原因,是为了使 Senparc.Weixin SDK 核心库可以不依赖于 ASP.NET 运行时,<br />" +
                              "以便部署在轻量级的容器等环境中。"
            };
            var aspnetList = new List <Home_IndexVD_AssemblyModel>();
            aspnetList.Add(new Home_IndexVD_AssemblyModel("ASP.NET<br />运行时基础库", "Senparc.Weixin.AspNet", typeof(Senparc.Weixin.AspNet.WeixinRegister), gitHubUrl: sdkGitHubUrl));                                               //AspNet 运行时基础库
            aspnetList.Add(new Home_IndexVD_AssemblyModel("公众号消息中间件", "Senparc.Weixin.MP.Middleware", typeof(Senparc.Weixin.MP.MessageHandlers.Middleware.MessageHandlerMiddlewareExtension), gitHubUrl: sdkGitHubUrl));         //DPBMARK MP DPBMARK_END
            aspnetList.Add(new Home_IndexVD_AssemblyModel("小程序消息中间件", "Senparc.Weixin.WxOpen.Middleware", typeof(Senparc.Weixin.WxOpen.MessageHandlers.Middleware.MessageHandlerMiddlewareExtension), gitHubUrl: sdkGitHubUrl)); //DPBMARK MiniProgram DPBMARK_END
            aspnetList.Add(new Home_IndexVD_AssemblyModel("企业微信消息中间件", "Senparc.Weixin.Work.Middleware", typeof(Senparc.Weixin.Work.MessageHandlers.Middleware.MessageHandlerMiddlewareExtension), gitHubUrl: sdkGitHubUrl));    //DPBMARK Work DPBMARK_END
            vd.AssemblyModelCollection[aspnetGroup] = aspnetList;

            var cacheAndExtensionGroup = new Home_IndexVD_GroupInfo()
            {
                Title       = "Senparc.Weixin SDK 扩展组件",
                Description = "Senparc.Weixin SDK 扩展组件用于提供缓存、WebSocket 等一系列扩展模块,<br />" +
                              "这些模块是盛派官方的一个实现,几乎所有的扩展模块都是严格面向接口开发的,<br />" +
                              "因此,您也可以自行扩展,并对接到微信 SDK 或其他系统中,<br />"
            };
            var cacheAndExtensionList = new List <Home_IndexVD_AssemblyModel>();
            cacheAndExtensionList.Add(new Home_IndexVD_AssemblyModel("Redis 缓存<br />(StackExchange.Redis)", "Senparc.Weixin.Cache.Redis", typeof(Senparc.Weixin.Cache.Redis.Register), gitHubUrl: sdkGitHubUrl)); //DPBMARK Redis DPBMARK_END
            cacheAndExtensionList.Add(new Home_IndexVD_AssemblyModel("Redis 缓存<br />(CsRedis)", "Senparc.Weixin.Cache.CsRedis", typeof(Senparc.Weixin.Cache.CsRedis.Register), gitHubUrl: sdkGitHubUrl));         //DPBMARK CsRedis DPBMARK_END
            cacheAndExtensionList.Add(new Home_IndexVD_AssemblyModel("Memcached 缓存", "Senparc.Weixin.Cache.Memcached", typeof(Senparc.Weixin.Cache.Memcached.Register), gitHubUrl: sdkGitHubUrl));                //DPBMARK Memcached DPBMARK_END
            cacheAndExtensionList.Add(new Home_IndexVD_AssemblyModel("WebSocket 模块", "Senparc.WebSocket", typeof(Senparc.WebSocket.WebSocketConfig), gitHubUrl: sdkGitHubUrl));                                   //DPBMARK WebSocket DPBMARK_END
            vd.AssemblyModelCollection[cacheAndExtensionGroup] = cacheAndExtensionList;

            var neucharGitHubUrl = "https://github.com/Senparc/NeuChar";
            var neucharGroup     = new Home_IndexVD_GroupInfo()
            {
                Title       = "跨平台支持库:Senparc.NeuChar",
                Description = "NeuChar 是盛派提供的一套跨平台服务的标准(例如跨微信公众号、微信小程序、钉钉、QQ小程序、百度小程序,等等),<br />" +
                              "使用一套代码,同时服务多平台。目前 Senparc.Weixin SDK 就是基于 NeuChar 标准在微信领域内的一个实现分支,<br />" +
                              "您也可以使用 NeuChar 扩展到更多的平台。<br />" +
                              "<a href=\"https://www.neuchar.com\" target=\"_blank\">https://www.neuchar.com</a> 是盛派官方提供的一个基于 NeuChar 标准实现的可视化跨平台配置操作平台。"
            };
            var neucharList = new List <Home_IndexVD_AssemblyModel>();
            neucharList.Add(new Home_IndexVD_AssemblyModel("NeuChar 跨平台支持库", "Senparc.NeuChar", typeof(Senparc.NeuChar.Register), gitHubUrl: neucharGitHubUrl));                                                            // NeuChar 基础库
            neucharList.Add(new Home_IndexVD_AssemblyModel("NeuChar APP 以及<br />NeuChar Ending<br />的对接 SDK", "Senparc.NeuChar.App", typeof(Senparc.NeuChar.App.HttpRequestType), gitHubUrl: neucharGitHubUrl));            // NeuChar 基础库
            neucharList.Add(new Home_IndexVD_AssemblyModel("NeuChar 的 ASP.NET<br />运行时支持库", "Senparc.NeuChar.AspNet", typeof(Senparc.NeuChar.Middlewares.MessageHandlerMiddlewareExtension), gitHubUrl: neucharGitHubUrl)); // NeuChar 基础库
            vd.AssemblyModelCollection[neucharGroup] = neucharList;

            var co2netGitHubUrl = "https://github.com/Senparc/Senparc.CO2NET";
            var co2netGroup     = new Home_IndexVD_GroupInfo()
            {
                Title       = "底层公共基础库:Senparc.CO2NET",
                Description = "Senparc.CO2NET 是一个支持 .NET Framework 和 .NET Core 的公共基础扩展库,包含常规开发所需要的基础帮助类。<br />" +
                              "开发者可以直接使用 CO2NET 为项目提供公共基础方法,免去重复准备和维护公共代码的痛苦。<br />" +
                              "您可以在几乎任何项目中使用 CO2NET。"
            };
            var co2netList = new List <Home_IndexVD_AssemblyModel>();
            co2netList.Add(new Home_IndexVD_AssemblyModel("CO2NET 基础库", "Senparc.CO2NET", typeof(CO2NET.Config), gitHubUrl: co2netGitHubUrl));                                                           //CO2NET 基础库版本信息
            co2netList.Add(new Home_IndexVD_AssemblyModel("APM 库", "Senparc.CO2NET.APM", typeof(CO2NET.APM.Config), gitHubUrl: co2netGitHubUrl));                                                        //CO2NET.APM 版本信息
            co2netList.Add(new Home_IndexVD_AssemblyModel("Redis 库<br />(StackExchange.Redis)", "Senparc.CO2NET.Cache.Redis", typeof(Senparc.CO2NET.Cache.Redis.Register), gitHubUrl: co2netGitHubUrl)); //CO2NET.Cache.Redis 版本信息  -- DPBMARK CsRedis DPBMARK_END
            co2netList.Add(new Home_IndexVD_AssemblyModel("Redis 库<br />(CSRedis)", "Senparc.CO2NET.Cache.CsRedis", typeof(Senparc.CO2NET.Cache.CsRedis.Register), gitHubUrl: co2netGitHubUrl));         //CO2NET.Cache.CsRedis 版本信息        -- DPBMARK CsRedis DPBMARK_END
            co2netList.Add(new Home_IndexVD_AssemblyModel("Memcached 库", "Senparc.CO2NET.Cache.Memcached", typeof(Senparc.CO2NET.Cache.Memcached.Register), gitHubUrl: co2netGitHubUrl));                //CO2NET.Cache.Memcached 版本信息               -- DPBMARK Memcached DPBMARK_END
            co2netList.Add(new Home_IndexVD_AssemblyModel("CO2NET 的 ASP.NET<br />运行时支持库", "Senparc.CO2NET.AspNet", typeof(Senparc.CO2NET.AspNet.Register), gitHubUrl: co2netGitHubUrl));                 //CO2NET.AspNet 版本信息
            vd.AssemblyModelCollection[co2netGroup] = co2netList;
            co2netList.Add(new Home_IndexVD_AssemblyModel("WebApi 引擎库(新)", "Senparc.CO2NET.WebApi", typeof(Senparc.CO2NET.WebApi.Register), supportNet45: false, gitHubUrl: co2netGitHubUrl));           //CO2NET.AspNet 版本信息
            vd.AssemblyModelCollection[co2netGroup] = co2netList;

            #endregion

            //当前 Sample 版本

            TempData["SampleVersion"] = Home_IndexVD_AssemblyModel.GetDisplayVersion(Assembly.GetExecutingAssembly().GetName().Version);

            //缓存
            //var containerCacheStrategy  = CacheStrategyFactory.GetContainerCacheStrategyInstance();
            var containerCacheStrategy = ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance() /*.ContainerCacheStrategy*/;
            TempData["CacheStrategy"] = containerCacheStrategy.GetType().Name.Replace("ContainerCacheStrategy", "");

            #region DPBMARK MP
            try
            {
                //文档下载版本
                var configHelper = new ConfigHelper();
                var config       = configHelper.GetConfig();
                TempData["NewestDocumentVersion"] = config.Versions.First();
            }
            catch (Exception)
            {
                TempData["NewestDocumentVersion"] = new CommonService.Download.Config();
            }
            #endregion  DPBMARK_END

            Weixin.WeixinTrace.SendCustomLog("首页被访问",
                                             string.Format("Url:{0}\r\nIP:{1}", Request.Host, HttpContext.Connection.RemoteIpAddress));
            //or use Header: REMOTE_ADDR

            //获取编译时间
            TempData["BuildTime"] = System.IO.File.GetLastWriteTime(this.GetType().Assembly.Location).ToString("yyyyMMdd.HH.mm");

            return(View(vd));
        }
コード例 #6
0
        public async Task <IActionResult> RunTest()
        {
            var sb = new StringBuilder();

            try
            {
                var containerCacheStrategy     = ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance() /*.ContainerCacheStrategy*/;
                var currentSystemCacheStrategy = containerCacheStrategy.BaseCacheStrategy();
                sb.AppendFormat($"当前系统缓存策略:{containerCacheStrategy.GetType().Name}<br /><br />");
                var currentSystemContainerCacheStrategy = ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance();
                sb.AppendFormat($"当前系统容器缓存(领域缓存)策略:{currentSystemContainerCacheStrategy.GetType().Name}<br /><br />");


                var caches = new Dictionary <IBaseObjectCacheStrategy, IContainerCacheStrategy> {
                    { LocalObjectCacheStrategy.Instance, LocalContainerCacheStrategy.Instance }
                };
                try
                {
                    caches[RedisObjectCacheStrategy.Instance] = RedisContainerCacheStrategy.Instance;
                }
                catch (Exception)
                {
                    sb.Append("==== 当前系统未配置 Reis,跳过 Redis测试 ====<br /><br />");
                }

                var cacheExpire = TimeSpan.FromSeconds(1);

                foreach (var cacheSet in caches)
                {
                    bool testSuccess           = false;
                    TestContainerBag1 cacheBag = null;
                    var baseCache      = cacheSet.Key;
                    var containerCache = cacheSet.Value;
                    sb.AppendFormat($"==== 开始指定调用缓存策略:{baseCache.GetType().Name} ====<br /><br />");

                    sb.Append($"----- 测试写入(先异步后同步) -----<br />");
                    var shortBagKey = SystemTime.Now.ToString("yyyyMMdd-HHmmss") + "." + cacheExpire.GetHashCode();                   //创建不重复的Key
                    var finalBagKey = baseCache.GetFinalKey(ContainerHelper.GetItemCacheKey(typeof(TestContainerBag1), shortBagKey)); //获取最终缓存中的键
                    var bag         = new TestContainerBag1()
                    {
                        Key      = shortBagKey,
                        DateTime = SystemTime.Now
                    };
                    var dt1 = SystemTime.Now;
                    await baseCache.SetAsync(finalBagKey, bag, expiry : null, true);//不设置过期时间

                    sb.Append($"异步写入完成:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms<br />");

                    dt1 = SystemTime.Now;
                    baseCache.Set(finalBagKey, bag, expiry: null, true);//不设置过期时间
                    sb.Append($"同步写入完成:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms<br />");
                    sb.Append($"----- 写入测试完成 -----<br /><br />");

                    sb.Append($"----- 检查缓存读取(先同步后异步) -----<br />");


                    dt1      = SystemTime.Now;
                    cacheBag = baseCache.Get <TestContainerBag1>(finalBagKey, true);
                    sb.Append($"同步读取完成:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms<br />");

                    dt1      = SystemTime.Now;
                    cacheBag = await baseCache.GetAsync <TestContainerBag1>(finalBagKey, true);

                    testSuccess = cacheBag != null;
                    sb.Append($"异步读取完成:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms<br />");

                    testSuccess &= cacheBag != null && cacheBag.DateTime == bag.DateTime && bag.Key == shortBagKey;
                    sb.Append($"----- 检查结果:{(testSuccess ? "成功" : "失败")} -----<br /><br />");


                    sb.Append($"----- 容器缓存(领域缓存)修改测试 -----<br />");
                    dt1 = SystemTime.Now;
                    cacheBag.DateTime = SystemTime.Now;
                    await TestContainer1.UpdateAsync(cacheBag, cacheExpire);//设置过期时间

                    sb.Append($"写入完成:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms<br />");

                    var dt2 = SystemTime.Now;
                    var containerResult1 = await TestContainer1.TryGetItemAsync <TestContainerBag1>(shortBagKey, z => z);

                    sb.Append($"使用 ContainerCacheStrategy 读取完成:{SystemTime.NowDiff(dt2).TotalMilliseconds.ToString("f4")} ms<br />");

                    dt2 = SystemTime.Now;
                    var containerResult2 = await baseCache.GetAsync <TestContainerBag1>(finalBagKey, true);

                    sb.Append($"使用 BaseContainerStrategy 读取完成:{SystemTime.NowDiff(dt2).TotalMilliseconds.ToString("f4")} ms<br />");

                    testSuccess = containerResult1 != null && containerResult2 != null && containerResult1.Key == containerResult2.Key && containerResult1.DateTime == containerResult2.DateTime;
                    sb.Append($"----- 测试结果:{(testSuccess ? "成功" : "失败")}(总耗时:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms) -----<br /><br />");

                    sb.Append($"----- 检查缓存过期 -----<br />");
                    var sleepTime = cacheExpire.Add(TimeSpan.FromMilliseconds(500));
                    sb.Append($"线程休眠:{sleepTime.TotalSeconds.ToString("f2")}s<br />");
                    await Task.Delay(sleepTime);

                    cacheBag = await baseCache.GetAsync <TestContainerBag1>(finalBagKey, true);

                    sb.Append($"----- 检查结果:{(cacheBag == null ? "成功" : "失败")} -----<br /><br />");

                    sb.Append($"----- 检查缓存删除 -----<br />");
                    await baseCache.UpdateAsync(finalBagKey, bag, cacheExpire, true);

                    cacheBag = await baseCache.GetAsync <TestContainerBag1>(finalBagKey, true);

                    testSuccess = cacheBag != null;
                    sb.Append($"写入待删除项目:{(cacheBag != null ? "成功" : "失败")}<br />");
                    dt1 = SystemTime.Now;
                    await baseCache.RemoveFromCacheAsync(finalBagKey, true);

                    sb.Append($"删除项目({SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms)<br />");
                    cacheBag = await baseCache.GetAsync <TestContainerBag1>(finalBagKey, true);

                    sb.Append($"----- 删除结果检查:{(cacheBag == null ? "成功" : "失败")} -----<br /><br /><br />");
                }
            }
            catch (Exception ex)
            {
                sb.Append($@"===== 发生异常:{ex.Message} =====<br />
{ex.StackTrace.ToString()}<br />
{ex.InnerException?.StackTrace.ToString()}<br />");
            }

            return(Content(sb.ToString()));
        }
コード例 #7
0
        public async Task <IActionResult> RunTest(int id = 0)
        {
            var sb = new StringBuilder();

            try
            {
                //选择要测试的缓存类型
                IContainerCacheStrategy containerCacheStrategy;
                switch (id)
                {
                case 1:
                    containerCacheStrategy = Senparc.Weixin.Cache.Redis.RedisContainerCacheStrategy.Instance;
                    break;

                case 2:
                    containerCacheStrategy = Senparc.Weixin.Cache.CsRedis.RedisContainerCacheStrategy.Instance;
                    break;

                case -1:
                    containerCacheStrategy = ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance();
                    break;

                default:
                    containerCacheStrategy = Senparc.Weixin.Cache.LocalContainerCacheStrategy.Instance;
                    break;
                }

                var baseCache = containerCacheStrategy.BaseCacheStrategy();
                sb.AppendFormat($"当前测试缓存策略:{baseCache.GetType().FullName}<br /><br />");
                var containerCache = ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance();
                sb.AppendFormat($"当前测试容器缓存(领域缓存)策略:{containerCache.GetType().FullName}<br /><br />");

                var          cacheExpire = TimeSpan.FromSeconds(1);
                const string successTag  = "<span style=\"color:green\">成功</span>";
                const string faildTag    = "<span style=\"color:red\">失败</span>";

                bool testSuccess           = false;
                TestContainerBag1 cacheBag = null;

                sb.AppendFormat($"==== 开始指定调用缓存策略:{baseCache.GetType().FullName} ====<br /><br />");

                sb.Append($"----- 测试写入(先异步后同步) -----<br />");
                var shortBagKey = SystemTime.Now.ToString("yyyyMMdd-HHmmss") + "." + cacheExpire.GetHashCode();                   //创建不重复的Key
                var finalBagKey = baseCache.GetFinalKey(ContainerHelper.GetItemCacheKey(typeof(TestContainerBag1), shortBagKey)); //获取最终缓存中的键
                var bag         = new TestContainerBag1()
                {
                    Key      = shortBagKey,
                    DateTime = SystemTime.Now
                };
                var dt1 = SystemTime.Now;
                await baseCache.SetAsync(finalBagKey, bag, expiry : null, true);//不设置过期时间

                sb.Append($"异步写入完成:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms<br />");

                dt1 = SystemTime.Now;
                baseCache.Set(finalBagKey, bag, expiry: null, true);//不设置过期时间
                sb.Append($"同步写入完成:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms<br />");
                sb.Append($"----- 写入测试完成 -----<br /><br />");

                sb.Append($"----- 检查缓存读取(先同步后异步) -----<br />");


                dt1      = SystemTime.Now;
                cacheBag = baseCache.Get <TestContainerBag1>(finalBagKey, true);
                sb.Append($"同步读取完成:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms<br />");

                dt1      = SystemTime.Now;
                cacheBag = await baseCache.GetAsync <TestContainerBag1>(finalBagKey, true);

                testSuccess = cacheBag != null;
                sb.Append($"异步读取完成:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms<br />");

                testSuccess &= cacheBag != null && cacheBag.DateTime == bag.DateTime && bag.Key == shortBagKey;
                sb.Append($"----- 检查结果:{(testSuccess ? successTag : faildTag)} -----<br /><br />");


                sb.Append($"----- 容器缓存(领域缓存)修改测试 -----<br />");
                dt1 = SystemTime.Now;
                cacheBag.DateTime = SystemTime.Now;
                await TestContainer1.UpdateAsync(cacheBag, cacheExpire);//设置过期时间

                sb.Append($"写入完成:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms<br />");

                var dt2 = SystemTime.Now;
                var containerResult1 = await TestContainer1.TryGetItemAsync <TestContainerBag1>(shortBagKey, z => z);

                sb.Append($"使用 ContainerCacheStrategy 读取完成:{SystemTime.NowDiff(dt2).TotalMilliseconds.ToString("f4")} ms<br />");

                dt2 = SystemTime.Now;
                var containerResult2 = await baseCache.GetAsync <TestContainerBag1>(finalBagKey, true);

                sb.Append($"使用 BaseContainerStrategy 读取完成:{SystemTime.NowDiff(dt2).TotalMilliseconds.ToString("f4")} ms<br />");

                testSuccess = containerResult1 != null && containerResult2 != null && containerResult1.Key == containerResult2.Key && containerResult1.DateTime == containerResult2.DateTime;
                sb.Append($"----- 测试结果:{(testSuccess ? successTag : faildTag)}(总耗时:{SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms) -----<br /><br />");

                sb.Append($"----- 检查缓存过期 -----<br />");
                var sleepTime = cacheExpire.Add(TimeSpan.FromMilliseconds(500));
                sb.Append($"线程休眠:{sleepTime.TotalSeconds.ToString("f2")}s<br />");
                await Task.Delay(sleepTime);

                cacheBag = await baseCache.GetAsync <TestContainerBag1>(finalBagKey, true);

                sb.Append($"----- 检查结果:{(cacheBag == null ? successTag : faildTag)} -----<br /><br />");

                //sb.Append($"----- 检查缓存删除 -----<br />");
                //await baseCache.UpdateAsync(finalBagKey, bag, cacheExpire, true);
                //cacheBag = await baseCache.GetAsync<TestContainerBag1>(finalBagKey, true);
                //testSuccess = cacheBag != null;
                //sb.Append($"写入待删除项目:{(cacheBag != null ? successTag : faildTag)}<br />");
                //dt1 = SystemTime.Now;
                //await baseCache.RemoveFromCacheAsync(finalBagKey, true);
                //sb.Append($"删除项目({SystemTime.NowDiff(dt1).TotalMilliseconds.ToString("f4")} ms)<br />");
                //cacheBag = await baseCache.GetAsync<TestContainerBag1>(finalBagKey, true);
                //sb.Append($"----- 删除结果检查:{(cacheBag == null ? successTag : faildTag)} -----<br /><br /><br />");
            }
            catch (Exception ex)
            {
                sb.Append($@"===== 发生异常:{ex.Message} =====<br />
{ex.StackTrace.ToString()}<br />
{ex.InnerException?.StackTrace.ToString()}<br />");
            }

            return(Content(sb.ToString()));
        }