在ASP.NET Web Services 中使用Session

          凡是有使用微软ASPASP.NET开发过web应用程序经验的人都知道,session对象可以来维护状态。那么,ASP.NET Web Services是不是也可以使用Session来维护状态呢? 答案是肯定的。这篇文章就是要简单的跟大家介绍在ASP.NET Web Services中如何来设定使用Session(HttpSessionState),以及ASP.NET Web Services的客户端该如何才能让此Session正常运作来维护状态。

 

        ASP.NET Web Services预设并未支持Session,所以在Web Services程序代码中不能直接使用Session,如果要使用,则必须先做一些设定。首先请确认web.config组态设定文件当中<sessionState>mode属性值不是Off,如果是Off,则Session不会运作,后续的其它设定也不会有作用。其次须设定Web Services对象类别继承System.Web.Services.WebService类别。继承此类别让Web Services类别可以直接使用ASP.NET物件,如SessionApplication等。最后,在方法宣告的< WebMethod ()>属性 (Attribute)中加入(EnableSession:=True)即可。

 

        下面是一个ASP.NET Web Service使用Session的简单例子。在这个例子中,如果Session发挥维护状态的效果,则同一使用者每呼叫一次Web ServiceCounter方法,回传值会以加一的方式递增。

 

<WebService(Namespace:="http://127.0.0.1/webServices/")> _

Public Class sessionService

           Inherits System.Web.Services.WebService

 

        <WebMethod(EnableSession:=True)> _

        Public Function Counter() As Integer

            Dim count As Integer

            If Session("Count") Is Nothing Then

                count = 1

            Else

                count = Session("Count") + 1

            End If

            Session("Count") = count

            Return count

        End Function

      End Class

 

        通常在完成了上面一个Web Service后,开发者会在IE浏览器中进行测试,结果确实可以得到预期中Session发挥了维护状态的效果。但是,Web Services并不是开发来让人用浏览器浏览的,而是由客户端程序来呼叫使用的。在客户端程序中叫用上面这个Web Service时,Session是否还会发挥效果呢? 答案还是肯定的,但是它却不像用浏览器叫用一般的简单直接,而是有些事情必须注意的。

 

        下面是一个呼叫上面这个Web Service的简单范例。 做法是透过在.NET Framework里建立呼叫Web ServiceProxy代理程序(WsNamespace.sessionService)来呼叫。

 

      Private Sub Button1_Click(ByVal sender As System.Object, _

            ByVal e As System.EventArgs) Handles Button1.Click

            Dim ws As New WsNamespace.sessionService()

            Dim count As Integer

            count = ws.Counter()

            Label1.Text = count

      End Sub

 

        Session的运作预设是使用Cookie来存放和传递辨识客户端的SessionID,如果没有Cookie的配合,则依预设的做法,Web Services无法透过SessionID来辨识使用者,如此便造成Session无法运作。在IE浏览器中进行测试Web Services时,通常浏览器都会支持Cookie,也因此Session可以正常发挥效果,但在客户端程序中呼叫Web Services时,则必须在客户端程序中利用CookieContainer来存放Cookie,如此才能传递SessionID来支持Session的运作。下面的例子就是改写前面的范例,在代理程序中设定CookieContainer

 

‘产生cookieContainer对象实例

Private CookieCnt As New System.Net.CookieContainer()

Private Sub Button1_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button1.Click

        Dim ws As New WsNamespace.sessionService()

 

        ‘将CookieContainer对象实例设给呼叫Web ServicesProxy来存放Cookie

        ws.CookieContainer = CookieCnt

        Dim count As Integer

        count = ws.Counter()

        Label1.Text = count

    End Sub

执行这个范例将可得到预期中count值依次加一的结果。

 

        以上简单的介绍了在ASP.NET Web Services 中使用Session的做法以及客户端程序该注意的地方,希望对大家有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值