在对象中保存状态

对 IIS 应用程序保存状态信息的一种最容易的方法是将它保存在一个对象中。当将状态保存在一个对象时,使用对象中的属性或变量来保持您要获取的信息。IIS 应用程序可按这种方式采用如下几种方法来使用对象:

不管您使用哪一种方法,您都需要在 webclass 中编写代码,这些代码在收到一个请求时,将信息写到适当的对象中,在需要时从对象中获取信息并操作这些保存的状态信息。

注意   如果您的 webclass 设置为在请求间保持活着,则最终用户必须有一个支持 cookies 的浏览器并且必须启用 cookies。详细信息请参阅“ IIS 应用程序的状态管理器”。

在 WebClass 对象中保存状态

通常,每当做出一个请求时,webclass 在运行时创建一个 webclass 实例,然后在响应发送到浏览器之后破坏它。然而您可以使用一个叫做 StateManagement 的 webclass 属性来改变这种行为。

使用 StateManagement,您可以在请求之间维持这个 webclass 的实例实例化或活动。如果选择在请求之间维持这个 webclass 活动,当第一个请求出现时,运行时 DLL 实例化这个 webclass 并且在应用程序终止前不破坏它。这就使您可以使用 webclass中的变量在浏览器请求之间保存某些信息。然而,这种解决方法将影响应用程序的伸缩性,因为维持活动的 webclass 被保存在 Active Server Pages 的 Session 对象中。结果,后续的请求必须被传递到相同的 web 服务器上,并且 ASP 必须采取措施保证使用正确的线程来处理此请求。

注意 可以使用 ReleaseInstance 方法来终止跨越请求保持活动的一个 webclass 实例。当在一个过程中使用这个方法时,运行时 DLL 在该过程结束时中止此 webclass 的实例。

如果您选择不保持该 webclass 活动,运行时 DLL 对每一个请求创建和破坏此 webclass。如果选择了这个选项,您仍然可以维持状态信息,但不能将它保存在这个 WebClass 对象中。您需要使用其他的方法来维持状态。这些方法中有一些是包括使用对象、数据库、cookie 或 URLData 属性来管理状态的。

要跨越请求保持 webclass 活动,请

要终止以前保持活动的一个 webclass 实例,请

在 Session 对象中保存状态

您可以使用 Session 对象来保持有关一个单一 webclass 用户的状态信息。Session 对象是 Active Server Pages 对象模型的一部分,并且可以看作 IIS 应用程序WebClass 对象的一个属性。

注意 使用这个方法不需要设置 webclass 的 StateManagement 属性为 wcRetainInstance,即使 webclass 被设置为不保存状态,您也可以在 Session 对象中保存状态。

Session 对象和 WebClass 对象都允许您在 webclass 级别上在会话特定的、服务器端状态中保存状态。但是,直接在 Session 对象中保存信息而不是在 WebClass 对象中保存状态允许您与其他的webclass 或 Active Server Pages 共享状态。另外,Visual Basic 对象(比如 WebClass 对象)是单元模型线程的,并且将所有的请求绑定到 IIS 中一个特别的线程上,所以使用 Session 对象更优化。

假设您想保证应用程序中的一个用户只能看到一个叫做 CustomerInfo 的页面一次,下面的代码显示了在处理期间如何设置一个 Session 对象的属性来记录用户已经看过这个页面的事实:

Sub CustomerInfoForm_Submit
   
   '这里是处理窗体的代码
   
   '相应地设置会话变量的值。
   Session("CustomerInfoDisplayed") = True
   
End Sub

这段代码当用户单击 CustomerInfo 页面上的一个按钮时,设置一个 Session 对象变量值为 True。它告诉 webclass 用户已经到过该页面。

一旦该信息被记录,webclass 必须使用这个信息来作出处理决定。下面的代码显示了 webclass 如何访问 Session 对象属性来确定是否在应用程序的另一个关键点显示顾客的信息窗体:

Sub PlaceOrder_Click

'如果 session 变量没有被设置,则顾客信息页面
'还没有被显示,因此将它返回到用户。

If Session("CustomerInfoDisplayed")= "" Then
Set NextItem = CustomerInfoForm
Else
Set NextItem = OrderForm
EndIf
End Sub

在这段代码中,webclass 检查一个 Session 对象属性来查看顾客信息页面是否已经被显示过。如果是,显示订单窗体。如果不是,显示顾客信息。

在 Application 对象中保存状态

您可以使用 Active Server Pages Application 对象来保持有关 webclass 的一个或多个用户的状态信息。Application 对象是 Active Server Pages 对象模型的一部分,并且被看作 IIS 应用程序中 WebClass 对象的一个属性。这个对象允许您跟踪比在 Session 对象能够记录的信息更详细的信息。

假设您想对应用程序中所有用户访问某一页面的次数进行计数。下面的代码显示了一个事件过程,您可以使用这个过程在 Active Server Pages 的 Application 对象中保存这个计数:

Private Sub MyWebclass_Start

'创建一个变量来保存用户的数量
Dim Counter as Long

'暂时锁定应用程序,然后
'计数增加1Application.Lock
Counter = Application("MyWebClassAccessCounter")
   Counter = Counter + 1

   '保存该值
   Application("MyWebClassAccessCounter") = Counter
   
   '解锁应用程序
   Application.Unlock
   

'开始应用程序
Set NextItem = WebItem1

End Sub