Пример #1
0
        /// <summary>
        /// 缓存没过期,直接输出缓存
        /// </summary>
        /// <param name="context"></param>
        /// <param name="key"></param>
        /// <param name="info"></param>
        private void ResponceCache(HttpContext context, string key, CacheInfo info)
        {
            var    req  = context.Request;
            var    rep  = context.Response;
            string time = info.StoreTime.ToString("r");

            if (req.Headers["If-Modified-Since"] == time)
            {
                rep.StatusCode = (int)System.Net.HttpStatusCode.NotModified;
                LogHelp.Info("cache hit 304 " + req.RawUrl);
            }
            else
            {
                var    httpInfo        = new HttpInfo();
                var    _stream         = Store.Get(key);
                int    headEndPosition = 0;
                string firstLine       = "";
                httpInfo.Headers = HttpParseHelp.ParseHeader(_stream, ref headEndPosition, ref firstLine);
                rep.StatusCode   = ParseRespondCode(firstLine);
                if (rep.StatusCode == 200)
                {
                    rep.AppendHeader("Last-Modified", time);
                }
                httpInfo.Content = _stream;
                OutResponse(req, rep, httpInfo);
                LogHelp.Info("cache hit html " + req.RawUrl);
            }
            context.ApplicationInstance.CompleteRequest();
        }
Пример #2
0
 /// <summary>
 /// 生成缓存并保存
 /// </summary>
 /// <param name="context"></param>
 /// <param name="key"></param>
 /// <param name="info"></param>
 private void GenHtmlAndSave(RequestInfo info)
 {
     if (!GlobalGenHtmlState.Contains(info.Key))
     {
         try
         {
             GlobalGenHtmlState.Add(info.Key);
             var html = GenHTML.GenHTML(info);
             if (html != null)
             {
                 Store.Save(info.Key, html);
             }
             else
             {
                 LogHelp.Warn("getHtml is null " + info.Path);
             }
         }
         catch (Exception e)
         {
             throw e;
         }
         finally
         {
             GlobalGenHtmlState.Remove(info.Key);
         }
     }
 }
Пример #3
0
 public SqlExpire()
 {
     if (System.Configuration.ConfigurationManager.ConnectionStrings["SqlExpireConn"] != null)
     {
         ConnStr = System.Configuration.ConfigurationManager.ConnectionStrings["SqlExpireConn"].ConnectionString;
     }
     else
     {
         LogHelp.Warn("SqlExpire config error: 没有数据库连接,staticHtml 会使用数据库连接:System.Configuration.ConfigurationManager.ConnectionStrings[\"SqlExpireConn\"]");
     }
 }
Пример #4
0
        /// <summary>
        /// 供线程线程调用方法
        /// </summary>
        /// <param name="arg"></param>
        private void ThreadStart(Object arg)
        {
            var req = arg as RequestInfo;

            try
            {
                GenHtmlAndSave(req);
            }
            catch (Exception e)
            {
                LogHelp.Warn("getHtml error " + e);
            }
        }
Пример #5
0
        void context_BeginRequest(object sender, EventArgs e)
        {
            var httpApplication = sender as HttpApplication;

            try
            {
                if (!core.IsSkip(httpApplication.Context.Request))
                {
                    core.Process(httpApplication.Context);
                }
            }
            catch (Exception ex)
            {
                LogHelp.Warn("request process error " + httpApplication.Request.RawUrl + " " + ex.ToString());
            }
        }
Пример #6
0
 public void Init(HttpApplication context)
 {
     try
     {
         if (htmlSection.Run == "on")
         {
             core = HtmlStaticCore.GetInstance(htmlSection);
             context.BeginRequest += new EventHandler(context_BeginRequest);
             LogHelp.Info("int success! ");
         }
         else
         {
             LogHelp.Warn("run off! 请在staticHtml节点中添加属性run=\"on\" on:启用 off:关闭");
         }
     }
     catch (Exception e)
     {
         LogHelp.Error("ini error! " + e.ToString());
     }
 }
Пример #7
0
        /// <summary>
        /// 根据请求信息,生成实际的sql语句
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        private String buildSql(System.Web.HttpRequest req, CacheInfo info)
        {
            String sql = Sql;

            foreach (var item in Values)
            {
                var value = req.QueryString[item];
                if (!String.IsNullOrEmpty(value))
                {
                    sql = sql.Replace("GET[" + item + "]", value);
                }
                else
                {
                    LogHelp.Warn("SqlExpire error:" + "配置了Get变量" + item + ",在Request.QueryString中确找不到");
                }
            }
            sql = sql.Replace("[STORETIME]", info.StoreTime.AddSeconds(3).ToString("yyyy-MM-dd HH:mm:ss"));
            sql = sql.Replace("[LENGTH]", info.Size.ToString());
            sql = sql.Replace("[KEY]", info.Key);
            return(sql);
        }