التخزين المؤقت لـ AppFabric - ما هي متطلبات التسلسل والتسلسل للكائن؟
-
03-10-2019 - |
سؤال
المشكلة: عند تخزين مثيل للفصل وإعادته على الفور من ذاكرة التخزين المؤقت ، أحصل على الكائن (ليس فارغًا) ، ولكن جميع خصائصه / حقوله لاغية أو افتراضية.
_cacheHelper.PutInCache("testModuleControlInfoOne", mci);
//mci has populated fields
var mciFromCacheOne = _cacheHelper.GetFromCache("testModuleControlInfoOne");
//mciFromCacheOne now has null or default fields
لذلك أظن أن الطريقة التي يتم بها تنظيم الكائن هي المشكلة ولا يقوم AppFabric بتسلسل الكائن بشكل صحيح لسبب ما.
عندما أستخدم طريقة التسلسل التالية ، أحصل على الكائن مع جميع الخصائص / الحقول كما كانت قبل التسلسل.
public T SerializeThenDeserialize<T>(T o) where T : class
{
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())
{
bf.Serialize(ms, o);
ms.Position = 0;
return (T)bf.Deserialize(ms);
}
}
كيف يمكن للكائن تخصيصًا وإلغاء التسلسل بشكل صحيح باستخدام التنسيق الثنائي وعدم فعل نفس الشيء بالضبط عن طريق التخزين المؤقت؟
هل واجه أي شخص هذا أو هل لدى أي شخص أي اقتراحات أو نصائح حول ما الذي يجب البحث عنه بشكل عام؟
المحلول
حسنًا ، وجدت ذلك.
نفذ الكائن ixmlserializable لذلك استخدم AppFabric أنه بدلاً من التسلسل العادي.
إن تشغيله من خلال جهاز XMLSerializer (بدلاً من ثنائي الشكل) يعطي نفس الحقول الفارغة التي كنت أعاني منها.
يبدو أن تطبيق IXMLSerializable لديه قضايا.
نصائح أخرى
أعتقد أنه عند التسلسل إلى XML (باستخدام IxmlSerializable) ، يتم تجاهل الحقول الخاصة للكائن ، وهذا قد يكون السبب في أن كائنك غير مكتمل عند الاسترجاع.
سيؤمن استخدام التسلسل الثنائي تأمين الكائن بأكمله (بما في ذلك الإشارات إلى كائنات أخرى).
قد ترغب في النظر إلى IDataCacheObjectSerializer
http://msdn.microsoft.com/en-us/library/windowsazure/hh552969.aspx
التخزين المؤقت AppFabric - هل يمكنني تحديد نمط التسلسل المستخدم لجميع الكائنات؟
(نعم أدرك أن هذا السؤال كان لك أيضًا :-)