ASP.Net Web 如何使用工作階段狀態詳解

來源:互聯網
上載者:User
  在上次部落格文章中,我們討論了用戶端對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.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.