2012-02-24 17 views
0

強く型付けされたデータセット(それを使用するのはちょっと考えていません)をシリアライズ可能にする方法を知っていますので、AppFabric Serverをセッションステートプロバイダとして使用して保存できますか?私はしばらくの間、InProcセッション状態を使用していて、これに関して何の問題もありませんでした。セッション状態をAppFabric Serverに移動するとすぐに、厳密に型指定されたデータセットでいくつかの問題が発生しています。自分のデータセットがシリアライズ可能ではないというエラーが表示され続けます。私はチェックして彼らにはSerializable属性があり、それらはシリアライズ可能なデータ型(int,string、など)しか含んでいません。厳密に型指定されたデータセットのシリアル化

編集:ここではスタックトレースは次のとおりです。

System.Runtime.Serialization.SerializationException: The constructor to deserialize an object of type ''DataSetClasses.MyStronglyTypedDataset'' was not found. ---> System.Runtime.Serialization.SerializationException: The constructor to deserialize an object of type ''DataSetClasses.MyStronglyTypedDataset'' was not found. at System.Runtime.Serialization.ObjectManager.GetConstructor(RuntimeType t, RuntimeType[] ctorParams) at System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfo info, StreamingContext context) --- End of inner exception stack trace --- at System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfo info, StreamingContext context) at System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder) at System.Runtime.Serialization.ObjectManager.DoFixups() at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Web.Util.AltSerialization.ReadValueFromStream(BinaryReader reader) at System.Web.SessionState.SessionStateItemCollection.ReadValueFromStreamWithAssert() at System.Web.SessionState.SessionStateItemCollection.DeserializeItem(String name, Boolean check) at System.Web.SessionState.SessionStateItemCollection.get_Item(String name) at System.Web.SessionState.HttpSessionStateContainer.get_Item(String name) at System.Web.SessionState.HttpSessionState.get_Item(String name) at appt.T2SharedLibrarySetup.btnSave_Click(Object sender, EventArgs e) in D:\Application\ProblemFile.aspx.vb:line 331 at System.Web.UI.WebControls.Button.OnClick(EventArgs e) at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) at System.Web.UI.Page.RaisePostBackEvent

+0

例外スタックトレースを投稿できますか? –

+0

上記のスタックトレースを追加しました – bechbd

+0

この記事は関連性があります - http://stackoverflow.com/questions/7891447/how-to-serialize-de-serialize-a-custom-dataset –

答えて

1

は、あなたが(AppFabricのにし、そこから)セッションにそれを置くことを試みる前に、まずバイト配列にオブジェクトをデシリアライズ/シリアライズしてください。ここに例があります。

 private static BinaryFormatter formatter = null; 

    private static Byte[] Serialize(object entity) 
    { 
     Logger.LogDebug(Category.Cache, "Serializing"); 
     Byte[] bytes; 
     if (formatter == null) formatter = new BinaryFormatter(); 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      formatter.Serialize(stream, entity); 
      bytes = stream.ToArray(); 
     } 
     return bytes; 
    } 

    private static object DeSerialize(Byte[] bytes) 
    { 
     #region Sanitation 
     if (bytes == null) { throw new System.ArgumentNullException("bytes"); } 
     #endregion 
     Logger.LogDebug(Category.Cache, "DeSerializing"); 
     object obj; 
     if (formatter == null) formatter = new BinaryFormatter(); 
     using (MemoryStream stream = new MemoryStream(bytes)) 
     { 
      obj = formatter.Deserialize(stream); 
     } 
     return obj; 
    } 

デシリアライザからオブジェクトを取得した後で、タイプドデータセット型にキャストしようとしました。

+0

これは強く型付けされていますVisual Studio内で作成したデータセット。データセットを追加し、テーブル/ sprocをデザイン面にドラッグアンドドロップします。これは直感的ではないようですが、Visual Studioのこの機能をシリアル化/デシリアライズする必要があります。 – bechbd

+0

私はこれを示唆している理由は、バイナリを自分自身でシリアル化する場合、オブジェクトを調べているappfabricクライアントの依存関係を取り除き、それをシリアル化する方法を理解しようとしていることです。たとえば、クライアントがクラスのメンバーのWCFデータアノテーション属性を検出した場合、不要と思われるNetDataContractSerializerを使用しようとします。 –

0

DataSet.ReadXML()またはWriteXML()関数を使用して、目的の機能を実現できます。

関連する問題