2012-02-24 21 views
0

「連載例外System.Web.Profile.DefaultProfileでスロー」asp.netシリアライゼーション例外がスローされ

私はカスタムクラスの多くを使用していますがでそれらすべてをマークしていますシリアライズ可能属性。最初にデフォルトページに正しくロードされますが、デフォルトのPageクラスではなくカスタム "BasePage"クラスを継承する別のページにリダイレクトが発生すると、この例外がスローされます。

セッション状態。 'StateServer'と 'SQLServer'モードでは、ASP.NETはセッション状態オブジェクトをシリアル化します。その結果、非直列化可能オブジェクトまたはMarshalByRefオブジェクトは許可されません。同様の逐次化がカスタムセッションステートストアによって「カスタム」モードで実行される場合、同じ制限が適用されます。

intellitraceのステートメントの1つに、「System.Web.Profile.DefaultProfileをシリアル化できませんでした」というようなものがあります。それはinbuiltの.NETオブジェクトではないでしょうか?もしそうなら、私はと推測できません。すべてのケースでシリアライザブルでなければなりません。 ???

答えて

0

私の場合は、HttpContext.Current.Profileオブジェクトを返すプロパティを持つSerializable属性を持つ新しいカスタムクラスを作成することで問題を解決しました。そして、セッションにプロファイルを追加する必要があるときはいつでも、この新しく作成されたクラスのプロパティを使ってプロファイルを追加します。アイデアのために@swanneeと@Sinaestheticに感謝します。

0

ASP.Netに組み込まれていますが、それがシリアライズ可能であるとは限りません。直列化できないフレームワーククラスがたくさんあります。

また、Defaultプロファイルはasp.netプロファイルメカニズムで動作するように作られています。なぜそれをセッションに保存しようとしていますか?すでに独自の設定可能なストレージメカニズムがあります。私はこれが、あなたがシステムと戦っている場所にいるケースかもしれないと思います。

+0

私はセッションにそれを保存しようとしていません。この問題は、アプリケーションがデフォルトの "Page"クラスの代わりに "BasePage"(継承するページ)を継承するページにリダイレクトしようとしたときに表示されます。もちろん、BasePage:Pageと同様にシリアライズ可能とマークされています。 – MrClan

+0

この "BasePage"クラスには何がありますか?セッションに何かを追加する必要があります。 Sessionオブジェクトにアクセスするものはありますか? – swannee

+0

私は何も表示されません。あなたは私に教えてください(または少なくとも回避策)、私がどのようにセッションオブジェクトにユーザープロファイルを保存すると、私は状態サーバーモードを使用していますか?多分それはいくつかのヒントを提供するだろう。 – MrClan

1

私は昨日この同じ問題に遭遇しました。カスタムオブジェクトは必ずしも問題ではなく、その内部のオブジェクトです。 System.Drawing.ImageやDictionary <などのものがある場合や、本質的にシリアライズ可能でないものがあれば、それは爆発するでしょう。だから、掘り起こす必要があるだろう。リストを文字列[]に変換してWebサービスに渡す(リストを受け取るが、文字列[]を受け取るようにインテリセンスで表示する)ような作業をしなければならなかった。

だから、私はそれを再考するだろう。また、テストサーバーで作業してしまえば、完了していないこともわかりました。 Webサービスを公開するとすぐに、同様の問題が発生し始めました。画像はシリアライザブルではなかったので、送信する前にバイト[]に変換しました。辞書もシリアライズできませんでした。

私はこれがほとんど答えではないことを認識していますが、うまくいけば助けてください。

+0

ありがとう、確かにいくつかの助け、特にイメージのものです(私は最初にそれについて考えなかったでしょう)。 – MrClan

関連する問題