則在web服務中使用到ASP.NET中的會話對象,有2件事情要做。
1.WebService 類別需要繼承System.Web.Services.WebService類別
2.WebMethod中的EnableSession屬性值應該設定為true
# 來看我們CalculatorWebService類,我們可以看到,它已經繼承System.Web.Services.WebService類別。但是,我們需要EnableSession屬性值設為true。
本文中,我們將試試在使用一個如下所示的GridView中的會話物件來展示最近的計算結果.
為了達成這個目的,首先要想下面這樣,修改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; }
# 然後再引入另外一個公共方法來傳回所有的計算結果. 要使用WebMethod特性來修飾這個方法,並且將EnableSession屬性設為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"]; } }
現在就可以建立我們的解決方案了,並能在瀏覽器中查看到我們的Web服務.
Web服務會列出兩個方法-Add和GetCalculations.
點選Add方法。讓我們輸入兩個數字,像是20和30,然後點選Invoke按鈕,我們會得到50這個結果.
## 讓我們來做另一次計算,例如30和70。然後點選Invoke按鈕,我們將會得到結果為100. # 現在讓我們回頭測試一下我們的GetCalculation方法。然後點選Invoke方法,現在回展示出我們之前所做的所有計算。它們會以一個字串陣列的形式回傳.
# 如此我們的Web服務就這樣按照預期運作了。現在讓我們來試試在我們的網路應用程式中使用這些方法。為此,在 Webform1.aspx 中, 讓我們往其中拽一個GridView控制項進去.
<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";建立我們的解決方案,並在瀏覽器中查看這個web視窗. 讓我們繼續加入兩個數字,例如20和30. 而我們會看到雖然我們已經執行了一次計算, You have not performed any calculations 這樣的訊息還是將會顯示出來.
這基本上是因為web應用程式並沒有像Web服務發送相同的SessionId。為此,將web.config檔案中的allowCookie設定成true.
現在我們再來執行這個web視窗並添加一些數字。現在我們就可以看到它按照預期運行了.
因此,這下面有幾點要深入思考:
如果Web服務被修改了,客戶端應用程式的代理類別就要被更新. 為此,在Service Reference夾下面的服務上點擊右鍵,並選擇Update Service Reference項目.
將allowCookies屬性設為true,以便讓客戶端應用程式接受從ASMX Web服務返回的cookie,並將其複製到未來所有項Web 服務發起的請求中去. 這就確保了客戶端和Web服務之間是維護的同一個Session.
以上是如何使用會話狀態(ASP.Net Web 服務)的詳細內容。更多資訊請關注PHP中文網其他相關文章!