您的位置:首页 > 其它

以服务的方式提供站点基础功能支持

2011-05-12 14:02 330 查看
Web站点除了提供内容展示,业务逻辑处理外,还有很多看不到的操作,如:错误日志,后台管理,权限分配,访问统计等。如果只有一个站点,完全可以根据需要逐步添加,但实际的情况是往往有多个子站点,这时这些重复的功能就可以以服务的方式提供了。

举个例子,我们需要统计执行慢的页面列表,简单的做法是:
1 在Global.asax 的 BeginRequest, EndRequest事件中记录执行时间,如果超过某个值,如2秒,就记录到数据库。
2 在后台管理增加 slowpage_list.aspx 页面用于查看执行慢的页面列表。

基本实现还是蛮简单的,如:

[Global.asax]

<%@ Application Language="C#" %>
<script runat="server">
protected void Application_BeginRequest(object sender, EventArgs e) {
// 记录开始时间
this.Context.Items["page_request_starttime"] = DateTime.Now;
}

protected void Application_EndRequest(object sender, EventArgs e) {
// 最大用时,单位毫秒,根据需要指定多慢的页面需要记录
const int maxTimeUse = 2000;
string url = HttpContext.Current.Request.Url.ToString();

// 页面处理用时
int timeUse = (int)(DateTime.Now - (DateTime)this.Context.Items["page_request_starttime"]).TotalMilliseconds;

// 如果执行时间超过最大用时
if (timeUse > maxTimeUse) {
// 记录执行慢的页面
AddSlowPage(url, timeUse);
}
}
</script>
以及:
[slowpage_list.aspx]

代码略 ......

这样做的缺点是,各个站点只能以拷贝的方式重用slow_page_list.aspx,以及还要重复数据库建表等。

改进的做法是:
增加一个 service.yousite.com 公用服务站点,各个子站点有执行慢的页面时,往这个公用服务站点提交。

if (timeUse > maxTimeUse) {
// 当前站点标识
string site = "site001";
string address = string.Format("http://service.yousite.com/add_slowpage.ashx?site={0}&timeUse={1}&url={2}",
site, timeUse, url);

// 指定超时时间,并用异步方式提交执行慢的页面地址
System.Net.HttpWebRequest client = System.Net.WebRequest.Create(address) as System.Net.HttpWebRequest;
client.Timeout = 2000;
client.ReadWriteTimeout = 2000;
client.BeginGetResponse(null, null);
}
然后在 service 站点,提供查看的页面,根据site参数来查看指定站点的slow page。 http://service.yousite.com/slowpage_list.aspx?site=site001
同时这个页面可以很方便的以iframe的方式嵌入到各个子站点的后台。

就像开发时,要DRY(Don't Repeat Yourself)避免重复代码一样,在规划站点时,也要避免重复的基础功能建设,这样的好处不光是减少工作量,也能够更好的保证整体站点的一致与稳定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: