如何将User对象设置为Serialize以存储在StateServer中

时间:2012-04-12 22:23:52

标签: asp.net serialization enums session-state

实际问题和疑问:

当我将sessionState模式从InProc切换到StateServer时,Web服务器抛出序列化错误。我需要更改什么才能使其正常工作?

技术:

ASP.Net,IIS7,Framework 4中的vb.Net和C#

详细信息:

我们正在将我们的ASP.Net网站的sessionState模式从InProc切换到StateServer。这是我们为了能够在同一服务器上的2个Web应用程序之间共享sessionID和会话信息而进行的一些更改。托管Web的服务器也将运行ASP.Net State Service服务。

当我在主站点的web.config文件中切换sessionState的模式时,我收到服务器错误:

Invalid cast from 'System.Int32' to 'OurCompany.OurApp.Objects.User+enUserType'.

User类声明为Serializable,并且始终与我们将用户存储在会话中一样:

<System.ComponentModel.DesignerCategory("Code"), SerializableAttribute()> Public Class User
    Inherits BaseClass
    Implements System.Runtime.Serialization.ISerializable

我暂时将声明改为:

<Serializable()> Public Class User

如果这会有所帮助,但它没有改变任何东西。

User类具有enUserType的公共枚举:

Public Enum enUserType
    usrInternal = 1
    usrCustomer
    usrCarrier
    usrSupplier
End Enum

和公共财产:

Public Property UserType() As enUserType
    Get
        Return m_iUserType
    End Get
    Set(ByVal Value As enUserType)
        m_iUserType = Value
    End Set
End Property

这些没有特别标记为Serializable,但从我读到的,它们不应该是。为了以防万一,我测试了它们被标记为Serializable,并没有解决问题。

如果我将sessionState模式切换回InProc,它可以正常工作。我的印象是,如果你的对象为InProc正确序列化,它们也应该适用于StateServer。我将这个假设基于我读过的其他人的问题和答案,但这可能是错误的。

如果我的web.config配置不正确,这就是sessionState标记的样子:

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false"/>

我已经在Web服务器上启动了ASP.Net State Service服务器,并检查了注册表中的配置,以确保它正在侦听默认端口42424并且它是。

如果您认为有任何更多细节相关,请告诉我,我会将其添加进来。

谢谢,

-BEP

其他信息

在查看了EdSF建议的其他文章之后,我添加了XmlAttribute XmlEnum,但没有帮助。我尝试了其他一些建议,并没有得到任何不同的结果。

这让我对问题的位置做了一些假设,并且我在类代码中找到了一个位置,其中序列化信息的某些转换正在发生,这就是问题所在。

0 个答案:

没有答案