1

実際の問題と質問:

sessionState モードを InProc から StateServer に切り替えると、Web サーバーがシリアル化エラーをスローします。正しく動作させるには何を変更する必要がありますか?

テクノロジー:

ASP.Net、IIS7、Framework 4 の vb.Net および C#

詳細:

ASP.Net Web サイトの sessionState モードを InProc から StateServer に切り替えています。これは、同じサーバー上の 2 つの Web アプリケーション間でセッション ID とセッション情報を共有できるようにするために行っているいくつかの変更のうちの 1 つです。Web をホストするサーバーは、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 があります。

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 State Service サーバーを起動し、レジストリの構成をチェックして、既定のポート 42424 でリッスンしていることを確認しました。

関連すると思われる詳細が他にもあればお知らせください。追加します。

ありがとう、

-BEP

追加情報

EdSF によって提案された他の記事をいくつか見た後、XmlAttribute XmlEnum を追加しましたが、それは役に立ちませんでした。他の提案をいくつか試しましたが、異なる結果は得られませんでした。

これにより、問題がどこにあるのかについていくつかの仮定を捨てることができ、シリアル化された情報でいくつかの変換が行われているクラス コード内の場所を見つけました。それが問題の場所でした。

4

0 に答える 0