ASP.NET如何使用web服务的会话状态

所属分类: 网络编程 / ASP.NET 阅读数: 1630
收藏 0 赞 0 分享

在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 虚方法、抽象方法、接口疑问

asp.net 虚方法、抽象方法、接口疑问等说明。
收藏 0 赞 0 分享

c#  操作符?? null coalescing operator

?? "null coalescing" operator 是c#新提供的一个操作符,这个操作符提供的功能是判断左侧的操作数是否是null,如果是则返回结果是右侧的操作数;非null则返回左侧的操作数。
收藏 0 赞 0 分享

.net 反序题目的详细解答第1/2页

在各种答案,以及平时面试过程中,这道题总归会有一些非常典型的错误发生。其中给老赵的感觉也非常有意思,不知其中的“思路”是否如老赵猜测那样。
收藏 0 赞 0 分享

implicitly convert type 'int' to 'short'的原因与解决方法

implicitly convert type 'int' to 'short'的原因与解决方法
收藏 0 赞 0 分享

比较完整的 asp.net 学习流程

好多朋友想学习后台编程语言,但请注意的事,学习后台是个循序渐进的过程,不可能一下就到位,其实不只是asp.net其它的编程语言都需要下面的一些知识。
收藏 0 赞 0 分享

官网 Ext direct包中.NET版的问题

下载了官网的 Ext direct 包进行研究,发现服务器端返回结果存在一点小问题。
收藏 0 赞 0 分享

C# XML操作 代码大全(读XML,写XML,更新,删除节点,与dataset结合等)第1/2页

C#操作XML(读XML,写XML,更新,删除节点,与dataset结合等),以下就是操作XML的所有方法,相信可以满足很大一部份的使用了。
收藏 0 赞 0 分享

c# 连接字符串数据库服务器端口号 .net状态服务器端口号

正常的数据库连接字符串配置,这是在MSSQL服务器端口是1433(默认)的情况下。
收藏 0 赞 0 分享

ASP.NET 路径问题的解决方法

相对路径和绝对路径在ASP.NET中可以用~/来解决.
收藏 0 赞 0 分享

asp.net TemplateField模板中的Bind方法和Eval方法

在TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现。以下是Bind方法的格式,Eval的格式也是和Bind一样的。 Bind("列的名称","显示的格式文")
收藏 0 赞 0 分享
查看更多