1

实际问题和问题:

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

技术:

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

细节:

我们正在将 ASP.Net 网站的 sessionState 模式从 InProc 切换到 StateServer。这是我们为能够在同一服务器上的 2 个 Web 应用程序之间共享 sessionID 和会话信息所做的几项更改中的一项。托管网站的服务器也将运行 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 对其进行了测试,但它并没有解决问题。

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

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

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

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

如果有任何您认为相关的详细信息,请告诉我,我会添加它们。

谢谢,

-BEP

附加信息

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

这让我对问题出在哪里提出了一些假设,并且我在类代码中找到了一个地方,其中发生了对序列化信息的一些转换,这就是问题所在。

4

0 回答 0