上一篇文章介紹了VMWare12虛擬機、Linux(CentOS7)系統安裝、部署Nginx1.6.3代理服務做負載均衡。接下來介紹通過Nginx將請求分發到各web應用處理服務。 一、Web應用開發 1、asp.net mvc5開發 (1)新建一個MVC5工程,新建一個Controller,在In ...
上一篇文章介紹了VMWare12虛擬機、Linux(CentOS7)系統安裝、部署Nginx1.6.3代理服務做負載均衡。接下來介紹通過Nginx將請求分發到各web應用處理服務。
一、Web應用開發
1、asp.net mvc5開發
(1)新建一個MVC5工程,新建一個Controller,在Index方法實現將當前時間保存到Session["mysession"],並寫Cookies["mycookies"]存儲主機名和當前時間。
public ActionResult Index() { if (this.HttpContext.Session["mysession"] == null) { this.HttpContext.Session["mysession"] = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); } this.HttpContext.Response.Cookies.Add(new HttpCookie("mycookies") { Expires = DateTime.Now.AddDays(1), Value = HttpContext.Server.MachineName + "||" + DateTime.Now.ToString() }); return View(); }
(2)在Controller中新增第二個方法GetSession,顯示Session和Cookies的值。
public ActionResult GetSession() { if (this.HttpContext.Session["mysession"] != null) { ViewBag.DD = this.HttpContext.Session["mysession"].ToString(); ViewBag.SCode = this.HttpContext.Session["mysession"].GetHashCode().ToString(); ViewBag.SID = this.HttpContext.Session.SessionID; } ViewBag.CVAL = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Value; ViewBag.CID = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Name; ViewBag.CDO = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Domain; return View(); }
(3)將session和cookies信息在頁面顯示,GetSession視圖代碼如下:
@{
ViewBag.Title = "GetSession";
}
<h2>站點:A -- GetSession</h2>
<span>站點:A</span>
<br />
<span>Session Value: @ViewBag.DD</span>
<br/>
<br />
<span>Session SCode: @ViewBag.SCode</span>
<br />
<br />
<span>Session ID: @ViewBag.SID</span>
<br />
<br />
<span>Cookies ID: @ViewBag.CID</span>
<br />
<br />
<span>Cookies Values: @ViewBag.CVAL</span>
<br />
<br />
<span>Cookies Values: @ViewBag.CDO</span>
以上實現session和cookies讀寫,為了驗證負載均衡下,每次請求處理是否保持一致,接下來重要內容,做負載均衡如何如何保持session一致,對於asp.net技術session原理此處不做介紹,網上搜索下大把。
2、Session共用技術
.Net平臺對支持幾種session存儲模式:
(1)InProc 模式
session存儲於當前站點在同一個進程內,修改web.config或者bin中文件更新,會導致session丟失。此模式為預設模式。
(2)aspnet state 模式
aspnet state是將session存儲在狀態服務中,需要啟動ASP.NET State Service,能看到進程aspnet_state.exe。還需要在web.config配置此模式。
(3)SQLServer 模式
此模式需要SQL Server配置相關信息,啟動代理服務、資料庫賬號及表,並將web.config指向資料庫。
(4)第三方擴展 模式
本框架採用此模式,將session存儲到其他存儲,比如:Memcached、redis緩存中,達到共用session的目的。可以通過實現ASP.NET中的SessionStateStoreProviderBase這個抽象類擴展。本系統採用將session存儲在redis緩存中,通過引入 RedisSessionStateProvider組件。
Install-Package Microsoft.Web.RedisSessionStateProvider
3、Nginx服務狀態情況
在centos終端輸入命令service nginx status 查看情況,確保服務正常運行。
4、Web站點部署
部署兩個站點分別為:
站點A:埠為8081,
站點B:埠為8082,
二、功能效果展現
(1)瀏覽器訪問Index方法,http://192.168.119.128/demo,顯示如下:
(2)瀏覽器訪問GetSession方法,http://192.168.119.128/demo/getsession,顯示如下:
通過以上驗證,獲取到的session和cookies都是一致。
作者:andon
出處:http://www.cnblogs.com/Andon_liu
關於作者:專註於微軟平臺項目架構、管理。熟悉設計模式、領域驅動、架構設計、敏捷開發和項目管理。現主要從事ASP.NET MVC、WCF/Web API、SOA、MSSQL、redis方面的項目開發、架構、管理工作。 如有問題或建議,請一起學習討論!
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
如有問題,可以郵件:[email protected] 聯繫我,謝謝。