1

为了在重新编译后维护会话,我使用 SQLServer 来存储会话状态。只要我不存储自定义对象,这就会很好地工作。当在会话中存储的重新编译后尝试使用自定义对象时,我收到以下错误:

[A]MyObject cannot be cast to [B]MyObject. 
Type A originates from 'App_Code.9qazkuv_, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null' 
    in the context 'Default' at location 
    'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
        \root\26676eb7\92c7e946\App_Code.9qazkuv_.dll'. 
Type B originates from 'App_Code.jndyusrx, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null' 
    in the context 'Default' at location 
    'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
        \root\26676eb7\92c7e946\App_Code.jndyusrx.dll'.

几个月来我一直在努力解决这个错误,到目前为止我发现的唯一解决方案是将对象放入 dll 文件中。在某些情况下,这并不容易做到。必须有一个更简单的方法来解决这个问题。有什么建议么?

同样奇怪的是,该错误不容易重现。我试图将我的站点复制到测试环境以解决该问题,但我无法在同一服务器上的测试环境中重现该错误。而在本地主机上,问题完全没有发生。

4

1 回答 1

0

问题是,会话状态类使用 BinaryFormatter 序列化您的对象,从而存储版本和类程序集名称。您最好围绕会话状态类编写一个包装器,该类接受您的对象,自己序列化它 - 如 JSON 或 XML - 并将结果作为字符串添加到您的状态。

于 2012-05-10T07:32:07.070 回答