ASP.NET如何使用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。
如何使用web服务的会话状态,相信通过这篇文章大家应该有所了解了吧。
推荐阅读
-
ASP.NET如何使用web服务的会话状态
-
使用ASP.NET 状态服务碰到的一些情况
-
使用ASP.NET Web Api构建基于REST风格的服务实战系列教程——使用Repository模式构建数据库访问层
-
使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【七】——实现资源的分页
-
如何使用ASP.NET Core、EF Core、ABP(ASP.NET Boilerplate)创建分层的Web应用程序(第一部分)
-
ASP.Net Web 如何使用会话状态详解
-
使用ASP.NET 状态服务碰到的一些情况
-
使用ASP.NET Web Api构建基于REST风格的服务实战系列教程——使用Repository模式构建数据库访问层
-
如何使用会话状态(ASP.Net Web 服务)
-
使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【七】——实现资源的分页