ASP.Net Web 服務 – 如何使用會話狀態
在上次部落格帖子中,我們討論了客戶端對web服務的使用。在這篇文章中我們將複習一下如何使用web服務的會話狀態。
這是上一篇文章的延續。因此請迅速的回顧之前的文章以便有一個清晰的概念。
你可以這裡閱讀上篇文章。
在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服務就這樣按照預期運作了。現在讓我們來試試在我們的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.
接下來是什麼?
在後續文章中,我們將會討論WebMethod特性及其屬性 有關的東西。
引用: Arun Ramachandran (http://BestTEchnologyBlog.Com)
原文地址:http://www.codeproject.com/Articles/807843/ASP-Net-Web-Services-How-to-use-session-state-in-a
相關文章
- 架構設計(五):有狀態服務和無狀態服務架構
- 在Oracle中,如何定時清理INACTIVE狀態的會話?Oracle會話
- Elastic 使用Heartbeat監測服務執行狀態AST
- Nginx服務系列——靜態資源web服務NginxWeb
- 如何使用FastReport.Service.dll建立Web服務ASTWeb
- 【flask】使用prometheus_client監控服務相關狀態FlaskPrometheusclient
- python如何建立web服務PythonWeb
- K8S有狀態服務-StatefulSet使用最佳實踐K8S
- Next App Router 模式下,如何同步服務端 Redux 初始狀態?APP模式服務端Redux
- 大話狀態協程
- QTcpServer實現web靜態資源服務QTTCPServerWeb
- 基於 swoole 的 websocket 服務一:狀態同步Web
- 使用grpcui測試ASP.NET core gRPC服務RPCUIASP.NET
- ASP.NET Core 應用程式狀態ASP.NET
- 如何使用Google服務Go
- Amazon EKS 上有狀態服務啟用儲存加密加密
- 基於 swoole 的 websocket 服務實現狀態同步Web
- 如何使用 byobu 複用 SSH 會話會話
- Asp.Net Core使用SignalR進行服務間呼叫ASP.NETSignalR
- 【視訊】使用ASP.NET Core開發GraphQL服務ASP.NET
- 使用nodejs和express搭建http web服務NodeJSExpressHTTPWeb
- 如何使用jstack分析執行緒狀態JS執行緒
- Linux web服務LinuxWeb
- Dapr實現分散式有狀態服務的細節分散式
- 揭祕有狀態服務上 Kubernetes 的核心技術
- web 報表如何使用以服務方式提供的資料來源?Web
- 在 asp.net core 中使用類似 Application 的服務ASP.NETAPP
- [Rust]使用Rocket框架搭建簡單Web服務Rust框架Web
- WebSocket實現服務端推送訊息和聊天會話Web服務端會話
- python如何使用__iter__()展現外部狀態Python
- [服務端與網路]http協議與http狀態碼服務端HTTP協議
- 專案實戰:zabbix監控MySQL狀態、服務資訊MySql
- Salesforce 如何使用 Grafana 和 Prometheus 大規模管理服務執行狀況 - grafanaSalesforceGrafanaPrometheus
- SQLServer會話KILL不掉,一直處於KILLED/ROLLBACK狀態情形淺析SQLServer會話
- 搭建 Restful Web 服務RESTWeb
- 事務狀態持久化持久化
- 如何使用thrift 服務引擎元件元件
- ASP.NET Core微服務如何在雲環境中跨平臺服務?ASP.NET微服務
- 使用Nagios打造專業的業務狀態監控iOS