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ファイルに入れることです。ただし、これを行うのはそれほど簡単ではない場合もあります。この問題を回避するには、もっと簡単な方法が必要です。助言がありますか?

また奇妙なのは、バグの再現が容易ではないということです。問題を実験するために自分のサイトをtestenviromentにコピーしようとしましたが、同じサーバー上にあるtestenviromentでエラーを再現できません。そしてローカルホストでは、問題はまったく発生しません。

4

1 に答える 1

0

問題は、セッション状態クラスがBinaryFormatterを使用してオブジェクトをシリアル化し、バージョンとクラスアセンブリ名を格納することです。オブジェクトを取得するセッション状態クラスのラッパーを作成し、JSONやXMLのように自分でシリアル化し、結果を文字列として状態に追加することをお勧めします。

于 2012-05-10T07:32:07.070 に答える