8

有很多与此类似的问题......但我没有看到他们是如何遇到这个特定问题的:

我有一个 web 服务,它返回一个错误,该错误以:

无法序列化会话状态。在“StateServer”和“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许不可序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“自定义”模式下完成类似的序列化,则适用相同的限制。

因此,像这样的问题提到寻找 SerializationException,找出无法序列化的内容,并使其可序列化。听起来很简单......但是当我寻找它时,我发现了这个:

[SerializationException:在程序集“Microsoft.Web.Services3,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”中键入“Microsoft.Web.Services3.StateManager”未标记为可序列化。]

这让我很困惑……听起来它实际上是在尝试序列化 StateManager……只是它隐藏了里面的其他东西是 StateManager 无法序列化吗?如果是这样,有没有办法找出什么?或者由于某种原因,StateManager 是否真的应该是可序列化的?(我怀疑我没有说得很清楚......对不起......如果你有问题,我会尽力回答。)

我还应该注意的一件事是我们使用 NCache 作为会话存储提供程序,这似乎可能以某种方式相关。但我不清楚这如何导致我所看到的。

4

1 回答 1

1

如果您正在序列化自定义对象,请确保使用属性装饰类。如果在您放入会话状态的任何对象上没有这个,序列化程序将失败。您可能需要隔离您正在存储的项目并检查它的属性以及它本身是否具有该属性。

于 2012-10-07T13:57:15.397 回答