在本文中,将探讨如何在ASP.NETWeb服务中使用会话状态。这是之前文章的延续,因此在继续阅读本文之前,请确保已经阅读了前文,以便对会话状态的使用有一个清晰的理解。可以通过以下链接阅读前文:。
要在使用ASP.NET的Web服务中使用会话对象,需要做两件事情:
通过查看CalculatorWebService类,可以看到它已经继承自System.Web.Services.WebService类。但需要将EnableSession属性设置为true。
在本文中,将尝试使用会话对象在GridView中显示最近的计算结果,如下所示:
首先,需要修改CalculatorWebService类的Add方法,如下所示:
[WebMethod(EnableSession = true)]
public int Add(int firstNumber, int secondNumber)
{
List calculations;
if (Session["CALCULATIONS"] == null)
{
calculations = new List();
}
else
{
calculations = (List)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 GetCalculations()
{
if (Session["CALCULATIONS"] == null)
{
List calculations = new List();
calculations.Add("You have not performed any calculations");
return calculations;
}
else
{
return (List)Session["CALCULATIONS"];
}
}
现在构建解决方案,并在浏览器中查看Web服务。Web服务应该列出两个方法——Add和GetCalculations。点击Add方法。让添加两个数字,比如20和30。点击Invoke按钮时,将得到结果50。
让再做一次计算,比如30和70。点击Invoke按钮时,将得到结果100。
现在让返回并测试GetCalculations方法。点击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。但是即使已经进行了一次计算,也会显示一条消息:"尚未执行任何计算"。
这主要是因为Web应用程序没有向Web服务发送相同的SessionId。要使其工作,请在web.config文件中将allowCookies设置为true。
让再次运行webform并添加一些数字。现在可以看到它按预期工作。