以服务的方式提供站点基础功能支持
生活随笔
收集整理的這篇文章主要介紹了
以服务的方式提供站点基础功能支持
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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)避免重復代碼一樣,在規劃站點時,也要避免重復的基礎功能建設,這樣的好處不光是減少工作量,也能夠更好的保證整體站點的一致與穩定。
舉個例子,我們需要統計執行慢的頁面列表,簡單的做法是:
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)避免重復代碼一樣,在規劃站點時,也要避免重復的基礎功能建設,這樣的好處不光是減少工作量,也能夠更好的保證整體站點的一致與穩定。
轉載于:https://www.cnblogs.com/jiyang/archive/2011/05/12/2044304.html
總結
以上是生活随笔為你收集整理的以服务的方式提供站点基础功能支持的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java连载2-Java特性
- 下一篇: Linux网编程收藏网址