中国最大的 الويب 开发资源网站及技术社区 ,
تنفيذ ASP
يمكن لجلسة ASP الأصلية تخزين بيانات الجلسة فقط في الذاكرة. من أجل تخزين بيانات الجلسة إلى SQL Server ، يتم كتابة كائن Microsoft® Visual® 6.0 Com المخصص لإدارة حالة الجلسة بدلاً من استخدام كائن الجلسة الأصلي. سيتم إنشاء مثيل لكائن COM في بداية كل طلب ويب وإعادة تحميل بيانات الجلسة من SQL Server. عند الانتهاء من البرنامج النصي ASP ، سيتم إنهاء هذا الكائن وسيتم استمرار حالة الجلسة إلى SQL Server.
الغرض الأساسي من كائن جلسة Visual Basic 6 COM هو توفير الوصول إلى كائنات خادم معلومات الإنترنت Microsoft®. يستخدم كائن جلسة Visual Basic 6.0 COM فئة MySession في مجموعة SessionUtility للاحتفاظ بحالة الجلسة ، وفئة SessionPersistence of SessionUtility لتحميل وحفظ بيانات الجلسة مع SQL Server. تتعرض فصول MySession و Sessionpersistence ككائنات COM باستخدام الأداة المساعدة regasm.exe. يمكن أن تسجل الأداة المساعدة regasm.exe وإنشاء مكتبة نوع لعميل COM لاستهلاك فئات الإطار.
يتم إعادة تحميل معلومات حالة الجلسة أثناء بناء الكائن. سيقوم المنشئ (class_initialize) أولاً باسترداد ملف تعريف الارتباط للجلسة ، ومدة الجلسة (SessionTimeout) ، وسلسلة اتصال قاعدة البيانات (SessionDsn) من كائن التطبيق ، وإنشاء مثيل من الفئة MySession للاحتفاظ ببيانات الجلسة. ثم سيحاول المنشئ إعادة تحميل بيانات الجلسة من SQL Server باستخدام ملف تعريف الارتباط المحدد. إذا لم يكن لدى SQL Server معلومات الجلسة ، أو انتهت صلاحية الجلسة ، فسيتم إصدار ملف تعريف ارتباط جديد. إذا عاد SQL Sever مع بيانات حالة الجلسة ، فسيتم تخزين حالة الجلسة في كائن MySession.
sub sub class_initialize ()
على خطأ goto errhandler:
const method_name as string = class_initialize
تعيين mysessionpersistence = sessionpersistence جديد
تعيين myobjectContext = getObjectContext ()
mySessionId = readSessionId ()
mydsnstring = getConnectionDSN ()
myTimeOut = getSessionTimeOut ()
myisnewsession = خطأ
استدعاء initcontents
الخروج الفرعي
errhandler:
err.raise err.number ، method_name &: & err.source ، err.description
نهاية الفرعية
initcontents الفرعية الخاصة ()
على خطأ goto errhandler:
const method_name as string = initContents
إذا كان mySessionID = إذن
تعيين myContentSentity = mySession جديد
mySessionId = mysessionpersistence.generatekey
myisnewsession = صحيح
آخر
تعيين myContentSentity =
mysessionpersistence.loadsession (mysessionid ، mydsnstring ، mytimeout)
إنهاء إذا
الخروج الفرعي
errhandler:
err.raise err.number ، method_name &: & err.source ، err.description
نهاية الفرعية
عندما يخرج مثيل الكائن عن النطاق في البرنامج النصي ، سيتم تنفيذ Destructor (class_terminate). سوف يظل المدمر بيانات الجلسة باستخدام طريقة sessionpersistence.savesession (). إذا كانت هذه جلسة جديدة ، فسيقوم المدمر أيضًا بإرسال ملف تعريف الارتباط الجديد إلى المتصفح.
sub sub class_terminate ()
على خطأ goto errhandler:
const method_name as string = class_terminate
استدعاء setDataForSessionId
الخروج الفرعي
errhandler:
err.raise err.number ، method_name &: & err.source ، err.description
نهاية الفرعية
setDataforsessionId الخاص ()
على خطأ goto errhandler:
const method_name as string = setDataForSessionId
استدعاء mysessionpersistence.savesession (mysessionid ،
mydsnstring ، mycontentsentity ، myisnewsession)
لو
تعيين myContentSentity = لا شيء
اضبط myobjectcontext = لا شيء
اضبط mysessionpersistence = لا شيء
الخروج الفرعي
errhandler:
err.raise err.number ، method_name &: & err.source ، err.description
نهاية الفرعية
يمكنك تنزيل رمز المصدر لمشروع ASP.NET SessionUtility ، ومدير جلسة COM ، والرمز التجريبي من خلال النقر على الرابط الموجود في الجزء العلوي من المقالة.
برنامج تجريبي
تم تصميم البرنامج التجريبي لزيادة وعرض رقم. بغض النظر عن الصفحة التي يتم تحميلها ، سيستمر الرقم في زيادة لأن قيمة الرقم يتم تخزينها في SQL Server ويتم مشاركتها بين ASP الكلاسيكي و ASP.NET.
خطوات لإعداد برنامج العرض التوضيحي
إنشاء قاعدة بيانات جديدة تسمى SessionDemodb.
قم بإنشاء جدول SessState (OSQL.exe –e –d sessionDemodb -i session.sql).
إنشاء دليل افتراضي جديد يسمى Demo.
قم بإيقاف تشغيل جلسة ASP ضمن علامة تبويب تكوين ASP.
انسخ web.config و testpage.aspx و global.asa و testpage.asp و globalinclude.asp إلى الدليل الظاهري.
قم بتحديث إعداد سلسلة DSN في global.asa و web.config. إعداد مهلة الجلسة اختياري. الافتراضي 20 دقيقة.
قم بتثبيت SessionUtility.dll في ذاكرة التخزين المؤقت للتجميع العالمي (Gacutil /I SessionUtility.dll).
فضح sessionutility.dll ككائن com باستخدام regasm.exe (regasm.exe sessionutility.dll /tlb:sessionutility.tlb).
انسخ SessionManager.dll إلى دليل محلي واستخدم REGSVR32.EXE لتسجيله (REGSVR32 SessionManager.dll).
منح حساب IUSR_ <ACKING_NAME> لقراءة وتنفيذ الوصول إلى SATESMGR.DLL.
خطوات لتشغيل البرنامج التجريبي
ابدأ Microsoft® Internet Explorer.
تحميل testpage.asp ل ASP الكلاسيكية. يجب أن يظهر الرقم 1 في صفحة الويب.
انقر فوق تحديث على Internet Explorer لإعادة تحميل الصفحة. يجب زيادة الرقم.
تغيير عنوان URL إلى testpage.aspx لـ ASP.NET. يجب أن يستمر العدد في زيادة.
يمكن تكرار نفس العملية من خلال بدء تشغيل صفحة testpage.aspx أولاً.
دمج كائن COM في تطبيق ASP موجود
تتمثل الممارسة الشائعة في تطوير تطبيقات ASP في تضمين ملف في بداية كل نص لتبادل الرموز والثوابت الشائعة. أفضل طريقة لدمج كائن الجلسة المخصصة هي إضافة رمز الاستئصال في الملف المشترك. الخطوة الأخيرة هي ببساطة استبدال جميع المرجع إلى كائن الجلسة باسم متغير الجلسة المخصص.
الحد/التحسين
لن يدعم هذا الحل تطبيق ASP الموجود الذي يخزن كائن COM في كائن الجلسة. في هذه الحالة ، هناك حاجة إلى مارشالر مخصص لتسلسل/إلغاء تخصيص الحالات من أجل استخدام كائن الجلسة المخصصة. بالإضافة إلى ذلك ، لا يدعم هذا الحل صفائف نوع التخزين للسلسلة. من خلال بعض الجهد الإضافي ، يمكن تنفيذ هذه الميزة باستخدام وظيفة JOING Microsoft® Visual Basic® 6.0 لدمج جميع عناصر الصفيف في سلسلة واحدة قبل تخزينها في كائن جلسة. يمكن القيام بالعكس باستخدام وظيفة تقسيم Visual Basic 6.0 لتقسيم السلسلة مرة أخرى إلى عناصر الصفيف الفردية. على جانب .NET Framework ، فإن أساليب الانضمام والانقسام هي أعضاء في فئة السلسلة.
خاتمة
يمثل ASP.NET نموذجًا جديدًا للبرمجة والهندسة المعمارية ، ويقدم العديد من المزايا على ASP الكلاسيكية. على الرغم من أن النقل من ASP إلى ASP.NET ليس عملية بسيطة ، فإن نموذج البرمجة الأفضل وتحسين أداء ASP.NET سيجعل عملية التحويل جديرة بالاهتمام. باستثناء تخزين كائن COM في كائن الجلسة ، يقدم النهج الموضح في هذه المقالة حلاً من شأنه أن يجعل عملية الترحيل أكثر بساطة.
عن المؤلف
بيلي يوين يعمل في شمال كاليفورنيا في مركز ميكروسوفت للتكنولوجيا السيليكون. يركز هذا المركز على تطوير حلول Microsoft .NET Framework. يمكن الوصول إليه في [البريد الإلكتروني المحمي]