ASP.NET如何使用web服務(wù)的會(huì)話狀態(tài)
在web服務(wù)中要用到ASP.NET中的會(huì)話對(duì)象,有2件事情需要做。
1.WebService 類需要繼承System.Web.Services.WebService類
2.WebMethod中的EnableSession屬性值應(yīng)該設(shè)置為true

來看我們CalculatorWebService類,我們可以看到,它已經(jīng)繼承System.Web.Services.WebService類。但是,我們需要EnableSession屬性值設(shè)置為true。
本文中,我們將試試在使用一個(gè)如下所示的GridView中的會(huì)話對(duì)象來展示最近的計(jì)算結(jié)果.

為了達(dá)成這個(gè)目的,首先要想下面這樣,修改CalculatorWebService類的Add方法.
[WebMethod(EnableSession = true)]
public int Add(int firstNumber, int secondNumber)
{
List<string> calculations;
if (Session["CALCULATIONS"] == null)
{
calculations = new List<string>();
}
else
{
calculations = (List<string>)Session["CALCULATIONS"];
}
string strTransaction = firstNumber.ToString() + " + "
+ secondNumber.ToString()
+ " = " + (firstNumber + secondNumber).ToString();
calculations.Add(strTransaction);
Session["CALCULATIONS"] = calculations;
return firstNumber + secondNumber;
}
然后再引入另外一個(gè)公共方法來返回所有的計(jì)算結(jié)果. 要使用WebMethod特性來修飾這個(gè)方法,并且將EnableSession屬性設(shè)置為true.
[WebMethod(EnableSession = true)]
public List<string> GetCalculations()
{
if (Session["CALCULATIONS"] == null)
{
List<string> calculations = new List<string>();
calculations.Add("You have not performed any calculations");
return calculations;
}
else
{
return (List<string>)Session["CALCULATIONS"];
}
}
現(xiàn)在就可以構(gòu)建我們的解決方案了,并能在瀏覽器中查看到我們的Web服務(wù).

Web服務(wù)會(huì)列出兩個(gè)方法——Add和GetCalculations.

點(diǎn)擊Add方法。讓我們輸入兩個(gè)數(shù)字,比如20和30,然后點(diǎn)擊Invoke按鈕,我們會(huì)得到50這個(gè)結(jié)果.


讓我們來做另外一次計(jì)算,比如30和70。然后點(diǎn)擊Invoke按鈕,我們將會(huì)得到結(jié)果為100.


現(xiàn)在讓我們回頭來測(cè)試一下我們的GetCalculation方法。然后點(diǎn)擊Invoke方法,現(xiàn)在回展示出我們之前所做的所有計(jì)算。它們會(huì)以一個(gè)字符串?dāng)?shù)組的形式返回.

如此我們的Web服務(wù)就這樣按照預(yù)期運(yùn)作了?,F(xiàn)在讓我們來試試在我們的Web應(yīng)用程序中使用這些方法。為此,在 Webform1.aspx 中, 讓我們往其中拽一個(gè)GridView控件進(jìn)去.
<tr> <td> <asp:GridView ID="gvCalculations" runat="server"> </asp:GridView> </td> </tr>
在文件修改之后的代碼之前,我們需要更新一下代理類。為此,在CalculatorService并選擇Update Service Reference.

此后,在btnAdd_Click事件代碼段之中, 加入如下幾行代碼.
gvCalculations.DataSource = client.GetCalculations(); gvCalculations.DataBind(); gvCalculations.HeaderRow.Cells[0].Text = "Recent Calculations";
構(gòu)建我們的解決方案,并在瀏覽器中查看這個(gè)web窗口.

讓我們繼續(xù)加入兩個(gè)數(shù)字,比如20和30. 而我們會(huì)看到雖然我們已經(jīng)執(zhí)行了一次計(jì)算, You have not performed any calculations 這樣的消息還是將會(huì)顯示出來.

這基本上是因?yàn)閣eb應(yīng)用程序并沒有像Web服務(wù)發(fā)送相同的SessionId。為此,將web.config文件中的allowCookie設(shè)置成true.

現(xiàn)在我們?cè)賮磉\(yùn)行這個(gè)web窗口并添加一些數(shù)字?,F(xiàn)在我們就可以看到它按照預(yù)期運(yùn)行了.

因此,這下面有幾點(diǎn)要深入思考:
如果Web服務(wù)被修改了,客戶端應(yīng)用程序的代理類就要被更新. 為此,在Service Reference夾下面的服務(wù)上點(diǎn)擊右鍵,并選擇Update Service Reference項(xiàng).
將allowCookies屬性設(shè)置成true,以便讓客戶端應(yīng)用程序接受從ASMX Web服務(wù)返回的cookie,并將其復(fù)制到未來所有項(xiàng)Web 服務(wù)發(fā)起的請(qǐng)求中去. 這就確保了客戶端和Web服務(wù)之間是維護(hù)的同一個(gè)Session。
如何使用web服務(wù)的會(huì)話狀態(tài),相信通過這篇文章大家應(yīng)該有所了解了吧。
相關(guān)文章
Asp.net response對(duì)象與request對(duì)象使用介紹
這篇文章主要介紹了Asp.net response對(duì)象與request對(duì)象使用,需要的朋友可以參考下2014-04-04
asp.net使用H5新特性實(shí)現(xiàn)異步上傳的示例
下面小編就為大家分享一篇asp.net使用H5新特性實(shí)現(xiàn)異步上傳的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
IIS上部署你的ASP.NET?Core?Web?Api項(xiàng)目及Swagger(圖文)
本篇經(jīng)驗(yàn)將和大家介紹如何在IIS上部署ASP.NET?Core項(xiàng)目,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,希望為初學(xué).NET?CORE的童靴入門有所幫助2023-09-09
ASP.NET Core環(huán)境變量配置和啟動(dòng)設(shè)置講解
這篇文章介紹了ASP.NET Core環(huán)境變量配置和啟動(dòng)設(shè)置的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
ASP.NET Core 2.0 WebApi全局配置及日志實(shí)例
下面小編就為大家分享一篇ASP.NET Core 2.0 WebApi全局配置及日志實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
微信JS-SDK分享功能的.Net實(shí)現(xiàn)代碼
這篇文章主要介紹了微信JS-SDK分享功能的.Net實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-09-09
.Net Core庫類項(xiàng)目跨項(xiàng)目讀取配置文件的方法
這篇文章主要介紹了.Net Core庫類項(xiàng)目跨項(xiàng)目讀取配置文件的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03
Visual Studio 2013+OpenCV2.4.10環(huán)境搭建教程
這篇文章主要為大家詳細(xì)介紹了Visual Studio 2013+OpenCV2.4.10環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

