/// <summary> /// 对页面进行更新 /// </summary> private IList <UpdateItem> Update(DateTime updateTime, IList <UpdateItem> items) { var errorList = new List <UpdateItem>(); try { foreach (var item in items) { try { string content = null; if (isRemote) { content = StaticPageManager.GetRemotePageString(item.DynamicUrl, inEncoding, validateString); } else { content = StaticPageManager.GetLocalPageString(item.Path, item.Query, inEncoding, validateString); } DateTime createTime = DateTime.Now; //开始生成 if (OnStart != null) { try { OnStart(createTime, item.DynamicUrl, item.StaticUrl); } catch { }; } //生成时回调 if (Callback != null) { try { content = Callback(item.DynamicUrl, item.StaticUrl, content); } catch { }; } string extension = Path.GetExtension(item.StaticPath); if (extension != null && extension.ToLower() == ".js") { //加入静态页生成元素 content = string.Format("{3}\r\n\r\n//<!-- 生成方式:主动生成 -->\r\n//<!-- 更新时间:{0} -->\r\n//<!-- 动态URL:{1} -->\r\n//<!-- 静态URL:{2} -->", createTime.ToString("yyyy-MM-dd HH:mm:ss"), item.DynamicUrl, item.StaticUrl, content.Trim()); } else { //加入静态页生成元素 content = string.Format("{3}\r\n\r\n<!-- 生成方式:主动生成 -->\r\n<!-- 更新时间:{0} -->\r\n<!-- 动态URL:{1} -->\r\n<!-- 静态URL:{2} -->", createTime.ToString("yyyy-MM-dd HH:mm:ss"), item.DynamicUrl, item.StaticUrl, content.Trim()); } StaticPageManager.SaveFile(content, item.StaticPath, outEncoding); //结束生成 if (OnComplete != null) { try { OnComplete(createTime, item.DynamicUrl, item.StaticUrl); } catch { }; } //置状态为生成成功 item.UpdateSuccess = true; } catch (Exception ex) { //置状态为生成失败 item.UpdateSuccess = false; StaticPageManager.SaveError(new StaticPageException(string.Format("单个生成静态文件失败,等待重新生成!\r\n{0} => {1}", item.DynamicUrl, item.StaticUrl), ex)); } } //未全部更新成功 if (items.Any(p => !p.UpdateSuccess)) { errorList = items.Where(p => !p.UpdateSuccess).ToList(); string html = string.Join("\r\n", errorList.Select(p => string.Format("{0} => {1}", p.DynamicUrl, p.StaticUrl)).ToArray()); throw new StaticPageException(string.Format("批量生成【{0}】个静态页失败,【{1}】分钟后重新生成!\r\n{2}", errorList.Count, retryInterval, html)); } staticPageDependency.UpdateSuccess = true; } catch (Exception ex) { //如果出错,则继续往下执行 if (ex is StaticPageException) { StaticPageManager.SaveError(ex as StaticPageException); } staticPageDependency.UpdateSuccess = false; } finally { //设置最后更新时间 //staticPageDependency.LastUpdateTime = updateTime; } return(errorList); }
/// <summary> /// 对页面进行更新 /// </summary> void IUpdateItem.Update(DateTime updateTime) { if (!(this as IUpdateItem).NeedUpdate(updateTime)) { return; } updateComplete = false; string dynamicurl = templatePath; string staticurl = savePath; if (!string.IsNullOrEmpty(query)) { dynamicurl = string.Format("{0}?{1}", dynamicurl, query); } var item = new UpdateItem { DynamicUrl = dynamicurl, StaticPath = staticurl }; try { string content = null; if (isRemote) { content = StaticPageManager.GetRemotePageString(item.DynamicUrl, inEncoding, validateString); } else { content = StaticPageManager.GetLocalPageString(item.Path, item.Query, inEncoding, validateString); } DateTime createTime = DateTime.Now; //开始生成 if (OnStart != null) { try { OnStart(createTime, item.DynamicUrl, item.StaticUrl); } catch (Exception ex) { }; } //生成时回调 if (Callback != null) { try { content = Callback(item.DynamicUrl, item.StaticUrl, content); } catch (Exception ex) { }; } string extension = Path.GetExtension(item.StaticPath); if (extension != null && extension.ToLower() == ".js") { //加入静态页生成元素 content = string.Format("{3}\r\n\r\n//<!-- 生成方式:主动生成 -->\r\n//<!-- 更新时间:{0} -->\r\n//<!-- 动态URL:{1} -->\r\n//<!-- 静态URL:{2} -->", createTime.ToString("yyyy-MM-dd HH:mm:ss"), item.DynamicUrl, item.StaticUrl, content.Trim()); } else { //加入静态页生成元素 content = string.Format("{3}\r\n\r\n<!-- 生成方式:主动生成 -->\r\n<!-- 更新时间:{0} -->\r\n<!-- 动态URL:{1} -->\r\n<!-- 静态URL:{2} -->", createTime.ToString("yyyy-MM-dd HH:mm:ss"), item.DynamicUrl, item.StaticUrl, content.Trim()); } StaticPageManager.SaveFile(content, item.StaticPath, outEncoding); //结束生成 if (OnComplete != null) { try { OnComplete(createTime, item.DynamicUrl, item.StaticUrl); } catch (Exception ex) { }; } staticPageDependency.UpdateSuccess = true; } catch (Exception ex) { StaticPageManager.SaveError(new StaticPageException(string.Format("单个生成静态文件失败,【{2}】分钟后重新生成!\r\n{0} => {1}", item.DynamicUrl, item.StaticUrl, retryInterval), ex)); //如果出错,则继续往下执行 staticPageDependency.UpdateSuccess = false; } finally { //设置最后更新时间 //staticPageDependency.LastUpdateTime = updateTime; } //全部生成成功才设置最后更新时间 if (updateTime == DateTime.MaxValue) { staticPageDependency.LastUpdateTime = DateTime.Now; } else { staticPageDependency.LastUpdateTime = updateTime; } if (!staticPageDependency.UpdateSuccess) { //全部生成成功才设置最后更新时间,否则往后推5分钟重新生成 staticPageDependency.LastUpdateTime = staticPageDependency.LastUpdateTime.AddMinutes(retryInterval); } updateComplete = true; }