会话对象中的经典ASP Store对象

5 session object-persistence asp-classic

我是经典ASP的新手,我需要在经典的asp中编写一个Web应用程序,因为客户希望它是经典的asp.:(

无论如何!这是我的问题:

当我有一个名为person的类的对象时:

Class Person
 Private m_sFirstName

 Public Property Get firstName
 firstName = m_sFirstName
 End Property

 Public Property Let firstName(value)
   m_sFirstName = value
 End Property

End Class


set aPerson = new Person
Person.firstName = "Danny"

set Session("somePerson") = aPerson
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好...

在下一个请求中,我尝试读取会话var,如:

If IsObject(Session("aPerson")) = true Then
    set mySessionPerson = Session("aPerson")

      Response.Write(TypeName(myTest)) // will output "Person" 
      Response.Write(mySessionPerson.firstName) // will output "Object doesn't support this property or method: 'mySessionPerson.firstName'
End If
Run Code Online (Sandbox Code Playgroud)

关于什么事情的任何想法都会有很大的帮助.

Ant*_*nes 5

我无法解释为什么您的代码无法正常工作。

该对象是在脚本上下文中创建的,该脚本上下文在请求完成后随后被拆除。因此,虽然类型名称可用,但对象的功能已损坏。

我可以告诉您,即使不是在脚本中创建的对象,在Session中存储对象也不是一个好主意。

ASP中使用的大多数对象都存在于单个线程中。一旦创建,只有创建对象的线程可以访问该对象。为了解决此问题,将对象存储在会话中后,ASP会将会话与创建该对象的特定工作线程关联起来。

当对该会话的后续请求到达时,它现在必须由其特定的工作线程处理。如果该线程正忙于处理其他请求,则即使有很多其他可用的工作线程,会话请求也会排队。

总体效果是破坏了应用程序的可伸缩性,在该可伸缩性中,工作负载可能会在工作线程之间不均匀地分布。


n8w*_*wrl 1

难道不应该吗

If IsObject(Session("somePerson")) = true Then
    set mySessionPerson = Session("somePerson")
Run Code Online (Sandbox Code Playgroud)