ViewState和序列化对象版本



我们正在使用ASP.NET ViewState存储自己的对象(即,不仅是原始类型)。每次进行构建时,构建号都会增加。我们试图解决的问题是在服务器更新期间:

  1. 用户加载页面
  2. 我们部署了Web应用程序的新构建
  3. 用户在同一页面上导致回发,并且抛出了例外:

    • httpexception:该页面的状态信息无效,可能被损坏。
    • ViewStateException:无效ViewState。
    • 参数检查:序列化数据无效。
    • fileloadexception:无法加载文件或汇编'[我们的汇编],版本= [我们的新版本],culture =中性,publickeytoken = ...'或其依赖项之一。位置的组件的清单定义与汇编引用
    • 不匹配

我理解为什么会发生这种情况 - ViewState已与上一类版本序列化,然后试图使用新版本进行应对化,并且.NET Serialization不支持这一点。

我们已经考虑创建一个自定义的pagestatePersister,并使用JSON(然后对其进行加密)来序列化/进行序列化,因为数据成员在构建之间几乎总是兼容。

其他想法?

首先,在ViewState上序列化数据不是一个好主意,原因之一是该挑选的征用次数,但另一个问题是数据是数据传播到服务器并进行的。返回每个后背。

我将使用一种简单的存储库方法,例如,将数据存储在缓存或会话中,因此您可以询问存储库,无论其何处以及如何持续,都可以模仿一个内存存储库。因此,您有类似" mydatasotarage.getMyCustomObject()"one_answers" mydatasotarage.savemycustomobject(customObject obj)"之类的东西,因此在存储库中,您可以将项目添加到缓存(使用UserId和objct名称为expect for Expsime)或excess)或excess)或excess of sessive of session或expect)或如果您喜欢(不要遭受他们的折磨,有些人会这样)。这是一种设计方法,而不是实施方法,但是通过这种方式,您将完全解除数据的存储方式,并且您将避免序列化问题,并且您将节省网络流量的KB,等等。

相关内容

最新更新