شرح تفصيلي لـ Web.config + تحسين asp.net
الكاتب:Eve Cole
وقت التحديث:2009-07-01 16:44:14
1. فهم ملف Web.config
ملف Web.config هو ملف نصي بتنسيق xml، يُستخدم لتخزين معلومات تكوين تطبيق الويب asp.NET (مثل طريقة المصادقة الأكثر استخدامًا لإعداد تطبيق الويب asp.NET، ويمكن أن يظهر في كل ملف). خطوة التطبيق في الدليل. عندما تقوم بإنشاء تطبيق ويب جديد من خلال .NET، يتم إنشاء ملف Web.config افتراضي تلقائيًا في الدليل الجذر بشكل افتراضي، بما في ذلك إعدادات التكوين الافتراضية، وترث كافة الدلائل الفرعية إعدادات التكوين الخاصة بها. إذا كنت تريد تعديل إعدادات التكوين لدليل فرعي، يمكنك إنشاء ملف Web.config جديد في الدليل الفرعي. يمكنه توفير معلومات التكوين بالإضافة إلى معلومات التكوين الموروثة من الدليل الأصل، ويمكنه أيضًا تجاوز أو تعديل الإعدادات المحددة في الدليل الأصل.
(1).يتم تخزين Web.Config في مواصفات ملف xml، وينقسم ملف التكوين إلى التنسيقات التالية
1. خصائص إعلان معالج قسم التكوين: توجد في الجزء العلوي من ملف التكوين ومضمنة في علامة <configSections>.
2. ميزات تكوين التطبيق المحددة: موجودة في <appSetting>. يمكنك تحديد معلومات مثل الإعدادات الثابتة العامة للتطبيق.
3. ميزات إعداد قسم التكوين: يقع في قسم <system.Web>، وهو يتحكم في سلوك وقت تشغيل asp.net.
4. ميزات مجموعات أقسام التكوين: باستخدام علامة <sectionGroup>، يمكنك تخصيص التجميع ووضعه داخل <configSections> أو داخل علامات <sectionGroup> الأخرى.
(٢) كل قسم من أقسام التكوين
1.<التكوين> العنصر الجذر للقسم، وهناك أقسام أخرى بداخله.
2. قسم <appSetting> يستخدم هذا القسم لتحديد إعدادات التطبيق. بالنسبة لبعض الإعدادات غير المؤكدة، يمكن للمستخدمين أيضًا ضبط استخدامهم الخاص وفقًا لحالتهم الفعلية:
أنا.<إعدادات التطبيق>
<add key="Conntction" value="server=192.168.85.66;userid=sa;password=;database=Info;"/>
<إعدادات التطبيق>
يتم تعريف ثابت سلسلة الاتصال، ويمكن تعديل سلسلة الاتصال في التطبيقات الفعلية دون تعديل رمز البرنامج.
II.<إعدادات التطبيق>
<add key="ErrPage" value="Error.aspx"/><appSettings> يحدد صفحة إعادة توجيه الأخطاء.
3.تنسيق القسم<compilation>:
<compilation
اللغة الافتراضية = "ج #"
التصحيح = "صحيح"
/>
I.اللغة الافتراضية: تحديد لغة رمز الخلفية، يمكنك اختيار لغتين: c# وvb.net.
IIdebug: عندما يكون صحيحًا، يبدأ تصحيح أخطاء aspx؛ وعندما يكون خطأ، لا يبدأ تصحيح أخطاء aspx، وبالتالي تحسين أداء التطبيق عند تشغيله. بشكل عام، يقوم المبرمجون بضبطها على "صحيح" عند التطوير وضبطها على "خطأ" عند تسليمها للعملاء.
4. تنسيق القسم <customErrors>:
<customErrors
الوضع = "البعيد فقط"
defaultRedirect = "error.aspx"
<خطأ كود الحالة = "440" إعادة التوجيه = "err440page.aspx"/>
<خطأ كود الحالة = "500" إعادة التوجيه = "err500Page.aspx"/>
/>
I.mode: له 3 حالات: On وOff وRemoteOnly. تشغيل يعني أن المعلومات المخصصة يتم عرضها دائمًا؛ إيقاف يعني أن معلومات خطأ asp.net المفصلة يتم عرضها دائمًا؛ RemoteOnly يعني أن المعلومات المخصصة يتم عرضها فقط للمستخدمين الذين لا يعملون على خادم الويب المحلي.
II.defaultRedirect: عنوان URL المستخدم لإعادة التوجيه عند حدوث خطأ اختياري
III.statusCode: يشير إلى رمز حالة الخطأ، مما يشير إلى حالة خطأ محددة.
IV. إعادة التوجيه: خطأ في عنوان URL المعاد توجيهه.
5.شكل قسم <العولمة>:
<العولمة
طلب التشفير = "utf-8"
ترميز الاستجابة = "utf-8"
ترميز الملف = "utf-8"
/>
I.requestEncoding: يتم استخدامه للتحقق من تشفير كل طلب وارد.
II.responseEncoding: يستخدم للتحقق من ترميز محتوى الرد المرسل.
III.fileEncoding: يُستخدم للتحقق من الترميز الافتراضي لـ aspx وasax وتحليل الملفات الأخرى.
6. تنسيق القسم <sessionState>:
<sessionState
الوضع = "إنبروك"
StateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString = "مصدر البيانات = 127.0.0.1؛ Trusted_Connection = نعم"
ملفات تعريف الارتباط = "خطأ"
المهلة = "20"
/>
I.mode: مقسم إلى حالات إيقاف، وInproc، وStateServer، وSqlServer
الوضع = يتم تخزين InProc في العملية. الميزات: يتمتع بأفضل أداء وأسرع سرعة، ولكن لا يمكن مشاركته عبر خوادم متعددة. الوضع = يتم تخزين "StateServer" في خادم الحالة الخوادم، استخدم هذه الطريقة. ومع ذلك، يتم تخزين المعلومات على خادم الحالة. بمجرد فشل خادم الحالة، سيتم تخزين المعلومات في خادم SQL.
II.stateConnectionString: حدد اسم الخادم حيث يقوم تطبيق asp.net بتخزين حالة الجلسة البعيدة.
III.sqlConnectionString: عند استخدام قاعدة بيانات حالة الجلسة، قم بتعيين سلسلة الاتصال هنا
IV. Cookieless: عند التعيين على true، فهذا يعني أن حالة جلسة ملف تعريف الارتباط لا تُستخدم لتحديد هوية العميل، وإلا فإن العكس هو الصحيح.
V. TimeOut: يستخدم لتحديد الوقت لتخزين حالة الجلسة إذا تم تجاوز الحد الزمني، فسيتم إنهاء الجلسة تلقائيًا.
7.تنسيق قسم <المصادقة>:
<وضع المصادقة = "النماذج">
<اسم النماذج = ".ASPXUSERDEMO" تسجيل الدخول Url = "Login.aspx" الحماية = "الكل" مهلة = "30"/>
</المصادقة>
<الترخيص>
<رفض المستخدمين = "؟"/>
</الترخيص>
I.Windows: استخدم طريقة مصادقة IIS
II.Forms: استخدام التحقق من صحة النماذج
III.Passport: استخدم وضع التحقق من ملف تعريف ارتباط Passport
IV.None: لا يستخدم أي طريقة للتحقق معنى سمات عقدة النماذج المضمنة فيه:
I.Name: يحدد اسم ملف تعريف الارتباط HTTP المستخدم لإكمال المصادقة.
II.LoginUrl: عنوان URL للصفحة الذي تتم إعادة توجيهه في حالة فشل التحقق أو انتهاء المهلة، وعادةً ما تكون صفحة تسجيل الدخول، مما يسمح للمستخدم بتسجيل الدخول مرة أخرى.
III.الحماية: حدد طريقة حماية بيانات ملفات تعريف الارتباط.
يمكن ضبطها على: التحقق من صحة التشفير بالكامل، أربع طرق حماية
أ. يعني تشفير البيانات وإجراء التحقق من صحتها بطريقتين.
ب. لا شيء يعني أن ملفات تعريف الارتباط غير محمية.
ج. التشفير يعني تشفير محتوى ملفات تعريف الارتباط
د. التحقق يعني التحقق من صحة محتوى ملفات تعريف الارتباط
IV. TimeOut: حدد وقت انتهاء صلاحية ملف تعريف الارتباط. قم بتسجيل الدخول مرة أخرى بعد انتهاء المهلة.
يمكن أن تصبح التعديلات التي يتم إجراؤها على ملف Web.config في وقت التشغيل نافذة المفعول دون إعادة تشغيل الخدمة (ملاحظة: استثناء لقسم <processModel>). بالطبع ملف Web.config قابل للتوسيع. يمكنك تخصيص معلمات التكوين الجديدة وكتابة معالجات قسم التكوين للتعامل معها.
يجب أن يكون ملف التكوين web.config (إعدادات التكوين الافتراضية) موجودًا فيه جميع التعليمات البرمجية التالية
<التكوين>
<system.web>
و
</system.web>
</التكوين>
لأغراض التعلم، تحذف الأمثلة التالية علامة XML هذه.
1. دور قسم <المصادقة>: تكوين دعم مصادقة asp.NET (أربعة أنواع: Windows، وForms، وPassPort، وNone). لا يمكن الإعلان عن هذا العنصر إلا على مستوى الكمبيوتر أو الموقع أو التطبيق. يجب استخدام عنصر <authentication> مع قسم <authorization>.
مثال:
المثال التالي هو موقع تكوين المصادقة المستند إلى النموذج، عندما يصل مستخدم لم يسجل الدخول إلى صفحة ويب تتطلب المصادقة، تنتقل صفحة الويب تلقائيًا إلى صفحة ويب تسجيل الدخول.
<وضع المصادقة = "النماذج">
<formsloginUrl="logon.aspx" name=".FormsAuthCookie"/>
</المصادقة>
يمثل العنصر logoUrl اسم صفحة ويب تسجيل الدخول، ويمثل الاسم اسم ملف تعريف الارتباط.
2. دور قسم <الترخيص>: يتحكم في وصول العميل إلى موارد URL (مثل السماح للمستخدمين المجهولين بالوصول). يمكن الإعلان عن هذا العنصر على أي مستوى (الكمبيوتر أو الموقع أو التطبيق أو الدليل الفرعي أو الصفحة). مطلوبة بالتزامن مع قسم <المصادقة>.
مثال: المثال التالي يعطل الوصول إلى المستخدمين المجهولين
<الترخيص>
<رفض المستخدمين = "؟"/>
</الترخيص>
ملاحظة: يمكنك استخدام user.identity.name للحصول على اسم المستخدم الحالي الذي تمت مصادقته، ويمكنك استخدام طريقة web.Security.FormsAuthentication.RedirectFromLoginPage لإعادة توجيه المستخدم الذي تمت مصادقته إلى الصفحة التي طلبها المستخدم للتو
3. دور قسم <compilation>: تكوين كافة إعدادات الترجمة المستخدمة بواسطة asp.NET. سمة التصحيح الافتراضية هي "True". ويجب ضبطها على False بعد تجميع البرنامج وتسليمه للاستخدام (التفاصيل موضحة في ملف Web.config، وتم حذف المثال هنا)
4.<customErrors>
الدور: توفير معلومات حول رسائل الخطأ المخصصة لتطبيقات asp.NET. ولا ينطبق على الأخطاء التي تحدث في خدمات الويب بتنسيق XML.
مثال: عند حدوث خطأ، انتقل إلى صفحة خطأ مخصصة.
<customErrors defaultRedirect="ErrorPage.aspx" mode="RemoteOnly">
</customErrors>
يمثل العنصر defaultRedirect اسم صفحة الويب الخاصة بالخطأ المخصص. يشير عنصر الوضع إلى: عرض معلومات مخصصة (سهلة) للمستخدمين الذين لا يعملون على خادم الويب المحلي.
5. دور قسم <httpRuntime>: تكوين إعدادات وقت تشغيل asp.NET HTTP. يمكن الإعلان عن هذا القسم على مستويات الكمبيوتر والموقع والتطبيق والدليل الفرعي.
مثال: التحكم في الحد الأقصى لحجم ملفات تحميل المستخدم إلى 4 ميجا، والحد الأقصى للوقت إلى 60 ثانية، والحد الأقصى لعدد الطلبات إلى 100
<httpRuntime maxRequestLength="4096" ExecutionTimeout="60" appRequestQueueLimit="100"/>
6. <الصفحات>
الدور: يحدد إعدادات التكوين الخاصة بالصفحة (مثل تمكين حالة الجلسة، وحالة العرض، وما إذا كان سيتم اكتشاف إدخال المستخدم، وما إلى ذلك). يمكن الإعلان عن <pages> على مستويات الكمبيوتر والموقع والتطبيق والدليل الفرعي.
مثال: لا تكتشف ما إذا كانت هناك بيانات خطيرة محتملة في المحتوى الذي أدخله المستخدم في المتصفح (ملاحظة: يتم اكتشاف هذا العنصر افتراضيًا. إذا كنت تستخدم خاصية عدم الكشف، فيجب عليك تشفير إدخال المستخدم أو التحقق منه). العميل يتم التحقق من حالة العرض المشفرة عند إعادة نشر الصفحة للتحقق من عدم التلاعب بحالة العرض من جانب العميل. (ملاحظة: لم يتم التحقق من هذا العنصر افتراضيًا)
<pages buffer = "true" EnableViewStateMac = "true" validateRequest = "false"/>
7. <حالة الجلسة>
الوظيفة: تكوين إعدادات حالة الجلسة للتطبيق الحالي (مثل تحديد ما إذا كان سيتم تمكين حالة الجلسة ومكان حفظ حالة الجلسة).
مثال:
<sessionState mode = "InProc" cookieless = "true" timeout = "20"/>
</sessionState>
ملحوظة:
الوضع = "InProc" يعني: تخزين حالة الجلسة محليًا (يمكنك أيضًا اختيار تخزينها في خادم بعيد أو خادم SAL أو تعطيل حالة الجلسة)
Cookieless = "true" يعني: تمكين حالة الجلسة إذا كان متصفح المستخدم لا يدعم ملفات تعريف الارتباط (الافتراضي هو False)
المهلة = "20" تعني: عدد الدقائق التي يمكن أن تكون فيها الجلسة خاملة
8. <تتبع>
الوظيفة: تكوين خدمة تتبع asp.NET، والتي تستخدم بشكل أساسي لاختبار البرنامج لتحديد مكان حدوث الأخطاء.
مثال: ما يلي هو التكوين الافتراضي في Web.config:
<trace تمكين = "false" requestLimit = "10" pageOutput = "false" TraceMode = "SortByTime" localOnly = "true" />
ملحوظة:
تمكين = "خطأ" يعني عدم تمكين التتبع؛
يحدد requestLimit="10" عدد طلبات التتبع المخزنة على الخادم
pageOutput="false" يعني أنه لا يمكن الوصول إلى مخرجات التتبع إلا من خلال أداة التتبع المساعدة؛
يشير TraceMode = "SortByTime" إلى أنه يتم عرض معلومات التتبع بالترتيب الذي تتم به معالجة عمليات التتبع.
localOnly = "true" يعني أن عارض التتبع (trace.axd) يُستخدم فقط لخادم الويب المضيف. وتنقسم عملية قسم تكوين ملف Web.config المخصص إلى خطوتين.
1. قم بتعريف اسم قسم التكوين واسم فئة .NET Framework التي تعالج بيانات التكوين في القسم الموجود بين علامتي <configSections> و</configSections> في الجزء العلوي من ملف التكوين.
2. قم بإجراء إعدادات التكوين الفعلية للقسم المعلن بعد منطقة <configSections>.
مثال: قم بإنشاء قسم لتخزين سلاسل اتصال قاعدة البيانات
<التكوين>
<أقسام التكوين>
<section name="appSettings" type="System.Configuration.NameValueFileSectionHandler، النظام، الإصدار=1.0.3300.0، الثقافة=محايدة، PublicKeyToken=b77a5c561934e089"/>
</configSections>
<إعدادات التطبيق>
<add key="scon" value="server=a;database=northwind;uid=sa;pwd=123"/>
</appSettings>
<system.web>
...
</system.web>
</التكوين>
الوصول إلى ملف Web.config يمكنك الوصول إلى ملف Web.config باستخدام مجموعة السلاسل الثابتة ConfigurationSettings.AppSettings مثال: احصل على سلسلة الاتصال التي تم إنشاؤها في المثال أعلاه. على سبيل المثال:
سلسلة ثابتة محمية Isdebug = ConfigurationSettings.AppSettings["debug"]
2. شرح تفصيلي لتكوين الجلسة في web.config بعد فتح ملف التكوين Web.config لأحد التطبيقات سنجد الفقرة التالية:
<حالة الجلسة
الوضع = "إنبروك"
StateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString = "مصدر البيانات = 127.0.0.1؛ Trusted_Connection = نعم"
ملفات تعريف الارتباط = "خطأ"
المهلة = "20"
/>
يقوم هذا القسم بتكوين كيفية قيام التطبيق بتخزين معلومات الجلسة. تركز عملياتنا المختلفة أدناه بشكل أساسي على هذا التكوين. دعونا أولاً نلقي نظرة على معنى المحتوى الموجود في هذا التكوين. بناء جملة عقدة sessionState كما يلي:
< وضع الجلسة = "إيقاف|InProc|StateServer|SQLServer"
بدون ملفات تعريف الارتباط = "صحيح|خطأ"
المهلة = "عدد الدقائق"
StateConnectionString = "tcpip = الخادم: المنفذ"
sqlConnectionString = "سلسلة اتصال SQL"
StateNetworkTimeout = "عدد الثواني"
/>
السمات المطلوبة هي: وصف خيار السمة
يحدد الوضع مكان تخزين معلومات الجلسة
Ø تم ضبط إيقاف التشغيل على عدم استخدام وظيفة الجلسة.
Ø تم تعيين InProc لتخزين الجلسة في العملية، وهي طريقة التخزين في asp.
Ø تم ضبط StateServer لتخزين الجلسة في خدمة حالة مستقلة.
Ø تقوم إعدادات SQLServer بتخزين الجلسة في خادم SQL.
السمات الاختيارية هي: وصف خيار السمة
Ø مجموعات بدون ملفات تعريف الارتباط حيث يتم تخزين معلومات جلسة العميل،
Ø يستخدم الوضع بدون ملفات تعريف الارتباط،
Ø خطأ استخدم وضع ملفات تعريف الارتباط، هذه هي القيمة الافتراضية،
Ø تحدد المهلة عدد الدقائق التي يقوم الخادم بعدها تلقائيًا بتسليم معلومات الجلسة، والقيمة الافتراضية هي 20 دقيقة.
تقوم StateConnectionString بتعيين اسم الخادم ورقم المنفذ المستخدم عند تخزين معلومات الجلسة في خدمة الحالة، على سبيل المثال: "tcpip=127.0.0.1:42424". هذه السمة مطلوبة عندما تكون قيمة الوضع هي StateServer.
يقوم sqlConnectionString بتعيين سلسلة الاتصال عند الاتصال بخادم SQL. على سبيل المثال، "مصدر البيانات = المضيف المحلي؛ الأمان المتكامل = SSPI؛ الكتالوج الأولي = northwind". هذه السمة مطلوبة عندما تكون قيمة الوضع هي SQLServer.
يقوم StateNetworkTimeout بتعيين عدد الثواني الخاملة التي يتم بعدها قطع اتصال TCP/IP بين خادم الويب والخادم الذي يقوم بتخزين معلومات الحالة عند استخدام وضع StateServer لتخزين حالة الجلسة. القيمة الافتراضية هي 10 ثواني.
يتم عرض تخزين حالة جلسة العميل في asp.NET في مقدمة نموذج الجلسة أعلاه، ويمكنك أن تجد أنه يجب تخزين حالة الجلسة في مكانين، وهما العميل والخادم. يكون العميل مسؤولاً فقط عن حفظ معرف الجلسة لموقع الويب المقابل، بينما يتم حفظ معلومات الجلسة الأخرى على جانب الخادم. في asp، يتم تخزين معرف الجلسة الخاص بالعميل فعليًا في شكل ملف تعريف ارتباط. إذا اختار المستخدم تعطيل ملفات تعريف الارتباط في إعدادات المتصفح، فلن يتمكن من الاستمتاع براحة الجلسة، وقد لا يتمكن حتى من الوصول إلى مواقع ويب معينة. من أجل حل المشاكل المذكورة أعلاه، يتم تقسيم طريقة تخزين معلومات جلسة العميل في asp.NET إلى نوعين: ملف تعريف الارتباط وبدون ملف تعريف الارتباط.
في asp.NET، لا تزال ملفات تعريف الارتباط تُستخدم بشكل افتراضي لتخزين معلومات الجلسة على العميل. إذا أردنا استخدام Cookieless لتخزين معلومات الجلسة على العميل، فالطريقة هي كما يلي:
ابحث عن الدليل الجذر لتطبيق الويب الحالي، وافتح ملف Web.Config، وابحث عن الفقرة التالية:
<حالة الجلسة
الوضع = "إنبروك"
StateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString = "مصدر البيانات = 127.0.0.1؛ Trusted_Connection = نعم"
ملفات تعريف الارتباط = "خطأ"
المهلة = "20"
/>
تم تغيير ملف تعريف الارتباط = "false" في هذه الفقرة إلى: cookieless = "true". وبهذه الطريقة، لم تعد معلومات جلسة العميل مخزنة باستخدام ملفات تعريف الارتباط، ولكن يتم تخزينها من خلال عنوان URL. أغلق IE الحالي، وافتح IE جديد، وأعد زيارة تطبيق الويب الآن، وسترى شيئًا مشابهًا لما يلي:
من بينها، ما تم تمييزه بالخط العريض بالخط العريض http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245 )/default.aspx هو معرف جلسة العميل. لاحظ أن هذه المعلومات تتم إضافتها تلقائيًا بواسطة IIS ولن تؤثر على الاتصالات العادية السابقة.
الاستعدادات لتخزين حالة الجلسة على جانب الخادم في asp.NET:
لكي تتمكن من تجربة الظاهرة التجريبية بشكل أفضل، يمكنك إنشاء صفحة تسمى SessionState.aspx، ثم إضافة الرموز التالية إلى <body></body>.
<scriptrunat="الخادم">
جلسة فرعية_إضافة (المرسل ككائن، e كـ EventArgs)
جلسة ("MySession") = text1.Value
span1.InnerHtml = "تم تحديث بيانات الجلسة! < P>تحتوي جلستك على: <font color=red>" & session("MySession"() & "< /font>"
نهاية الفرعية
جلسة التحقق الفرعية (المرسل ككائن، eAs EventArgs)
إذا كانت (الجلسة ("MySession") لا شيء) إذن
span1.InnerHtml = "لا شيء، فقدت بيانات الجلسة!"
آخر
span1.InnerHtml = "تحتوي جلستك على: < لون الخط= أحمر>" & session("MySession").ToString() & "< /font>"
نهاية إذا
نهاية الفرعية
</script>
<formrunat="server"id="Form2">
< inputid = "text1" type = "text"runat = "الخادم" اسم = "text1">
< inputtype = "submit" runat = "server" OnServerClick = "Session_Add"
value = "أضف إلى حالة الجلسة" id = "Submit1"name = "Submit1">
< inputtype = "submit" runat = "server" OnServerClick = "CheckSession"
القيمة = "عرض حالة الجلسة" id = "Submit2"name = "Submit2">
< / النموذج>
< حجم الساعة = "1">
<fontsize="6"><spanid="span1"runat="server" />< /font>
يمكن استخدام صفحة SessionState.aspx لاختبار ما إذا كانت معلومات الجلسة مفقودة على الخادم الحالي.
تخزين معلومات جلسة الخادم أثناء العملية دعنا نعود إلى الفقرة السابقة من ملف Web.config:
<حالة الجلسة
الوضع = "إنبروك"
StateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString = "مصدر البيانات = 127.0.0.1؛ Trusted_Connection = نعم"
ملفات تعريف الارتباط = "خطأ"
المهلة = "20"
/>
عندما تكون قيمة الوضع InProc، فهذا يشير إلى أن الخادم يستخدم هذا الوضع.
هذه الطريقة هي نفس الوضع السابق في asp، أي أن الخادم يخزن معلومات الجلسة في عملية IIS. عند إيقاف تشغيل IIS وإعادة تشغيله، سيتم فقدان هذه المعلومات. ولكن لهذا الوضع أيضًا أكبر ميزة خاصة به، وهي الأداء الأعلى. نظرًا لأنه يتم تخزين جميع معلومات الجلسة في عملية IIS، يمكن لـ IIS الوصول بسرعة إلى هذه المعلومات. يكون أداء هذا الوضع أسرع من تخزين معلومات الجلسة خارج العملية أو تخزين معلومات الجلسة في SQL Server. هذا الوضع هو أيضًا الطريقة الافتراضية لـ asp.NET.
حسنًا، لنقم الآن بالتجربة. افتح صفحة SessionState.aspx الآن وأدخل بعض الأحرف لتخزينها في الجلسة. ثم، لنعد تشغيل IIS. لاحظ أن الأمر لا يتعلق بإيقاف الموقع الحالي وإعادة تشغيله، بل النقر بزر الماوس الأيمن فوق العقدة التي تحمل اسم الجهاز المحلي في IIS وتحديد إعادة تشغيل IIS. (أعتقد أنه عندما استخدمت NT4، اضطررت إلى إعادة تشغيل الكمبيوتر لإعادة تشغيل IIS. Microsoft هي بالفعل @#$%^&) ارجع إلى صفحة SessionState.aspx، وتحقق من معلومات الجلسة الآن، واكتشف أن المعلومات قد تم ضائع.
تخزين معلومات جلسة الخادم خارج العملية أولاً، دعونا نفتح أدوات الإدارة -> الخدمات، ونبحث عن الخدمة المسماة: asp.NET State Service، ونبدأ تشغيلها. في الواقع، تبدأ هذه الخدمة عملية حفظ معلومات الجلسة. بعد بدء هذه الخدمة، يمكنك رؤية عملية تسمى aspnet_state.exe من إدارة مهام Windows->العمليات. هذه هي العملية التي نقوم فيها بحفظ معلومات الجلسة.
ثم ارجع إلى الفقرة أعلاه في ملف Web.config وقم بتغيير قيمة الوضع إلى StateServer. بعد حفظ الملف، أعد فتح IE، وافتح صفحة SessionState.aspx، واحفظ بعض المعلومات في الجلسة. في هذا الوقت، دعونا نعيد تشغيل IIS ونعود إلى صفحة SessionState.aspx للتحقق من معلومات الجلسة الآن ونكتشف أنها لم يتم فقدانها.
في الواقع، هذه الطريقة لتخزين معلومات الجلسة خارج العملية لا تعني فقط أنه يمكن تخزين المعلومات خارج عملية الجهاز المحلي، ولكن يمكن أيضًا تخزين معلومات الجلسة في عمليات الخوادم الأخرى. في هذا الوقت، لا تحتاج فقط إلى تغيير قيمة الوضع إلى StateServer، ولكنك تحتاج أيضًا إلى تكوين المعلمات المقابلة في StateConnectionString. على سبيل المثال، الحساب الخاص بك هو 192.168.0.1. إذا كنت تريد تخزين الجلسة في عملية الكمبيوتر بعنوان IP 192.168.0.2، فأنت بحاجة إلى تعيينها على النحو التالي:stateConnectionString="tcpip=192.168.0.2:42424". بالطبع، لا تنس تثبيت .NET Framework على جهاز الكمبيوتر 192.168.0.2 وبدء تشغيل خدمة asp.NET State Services.
تخزين معلومات جلسة الخادم في خادم SQL أولاً، دعونا نقوم ببعض الأعمال التحضيرية. بدء تشغيل خادم SQL وخدمات وكيل خادم SQL. قم بتنفيذ ملف نصي يسمى InstallSqlState.sql في خادم SQL. سيقوم ملف البرنامج النصي هذا بإنشاء قاعدة بيانات في SQL Server خصيصًا لتخزين معلومات الجلسة، ومهمة وكيل SQL Server التي تحافظ على قاعدة بيانات معلومات الجلسة. ويمكننا العثور على هذا الملف في المسار التالي:
[محرك أقراص النظام]winntMicrosoft.NETFramework[الإصدار]
ثم افتح محلل الاستعلام، واتصل بخادم SQL، وافتح الملف الآن وقم بتنفيذه. انتظر لحظة وسيتم إنشاء قاعدة البيانات والوظيفة. في هذا الوقت، يمكنك فتح Enterprise Manager ورؤية أنه تمت إضافة قاعدة بيانات جديدة تسمى ASPState. ولكن لا يوجد سوى بعض الإجراءات المخزنة في قاعدة البيانات هذه، ولا يوجد جدول مستخدم. في الواقع، يتم تخزين معلومات الجلسة في جدول ASPStateTempSessions لقاعدة بيانات tempdb، ويقوم جدول ASPStateTempApplications آخر بتخزين معلومات كائن التطبيق في asp. تم إنشاء هذين الجدولين أيضًا بواسطة البرنامج النصي الآن. بالإضافة إلى ذلك، تحقق من الإدارة->عامل خادم SQL->الوظائف واكتشف أن هناك أيضًا وظيفة إضافية تسمى ASPState_Job_DeleteExpiredSessions تقوم هذه المهمة فعليًا بحذف معلومات الجلسة منتهية الصلاحية من جدول ASPStateTempSessions كل دقيقة.
بعد ذلك، نعود إلى ملف Web.config ونقوم بتعديل قيمة الوضع إلى SQLServer. لاحظ أنك تحتاج أيضًا إلى تعديل قيمة sqlConnectionString في نفس الوقت، ويكون التنسيق:
sqlConnectionString = "مصدر البيانات = المضيف المحلي؛ الأمان المتكامل = SSPI؛"
يشير مصدر البيانات إلى عنوان IP الخاص بخادم SQL Server. إذا كان خادم SQL وIIS هما نفس الجهاز، فما عليك سوى كتابة 127.0.0.1. الأمان المتكامل = SSPI يعني استخدام مصادقة Windows المتكاملة. بهذه الطريقة، سيتم الوصول إلى قاعدة البيانات كـ asp.NET. من خلال هذا التكوين، يمكنك الحصول على أمان أفضل من طريقة مصادقة خادم SQL باستخدام userid=sa;password=password . بالطبع، إذا كان خادم SQL يعمل على جهاز كمبيوتر آخر، فقد تحتاج إلى الحفاظ على تناسق المصادقة على كلا الجانبين من خلال مجال Active Directory.
مرة أخرى، دعونا نقوم بالتجربة. أضف معلومات الجلسة إلى SessionState.aspx، ثم اكتشف أن معلومات الجلسة موجودة بالفعل في خادم SQL، حتى إذا قمت بإعادة تشغيل جهاز الكمبيوتر، فلن يتم فقدان معلومات الجلسة. الآن، لقد رأيت تمامًا كيف تبدو معلومات الجلسة، ويتم تخزينها في SQL Server. ويعتمد ما يمكنك فعله على أدائك.
ملخص 3. الإعدادات العامة لمصادقة نموذج asp.net
الإعدادات العامة لمصادقة نموذج asp.net:
1: في web.config، قم بإضافة مصادقة النموذج؛
<وضع المصادقة = "النماذج">
<forms name="auth"loginUrl="index.aspx" timeout="30"></forms>
</المصادقة>
<الترخيص>
<رفض المستخدمين = "/>".
</الترخيص>
2: إذا كانت هناك صفحة تسجيل، فيجب السماح للمستخدمين المجهولين بالاتصال بصفحة التسجيل للتسجيل؛
يجب أن يكون الكود التالي بين <configuration><system.web> ولا ينبغي تضمينه بين <system.web>..</system.web>؛
----------------يشير إلى أنه مسموح للمستخدمين المجهولين بالوصول إلى صفحة userReg.aspx.
<مسار الموقع = "userReg.aspx">
<system.web>
<الترخيص>
<السماح للمستخدمين = "/>".
</الترخيص>
</system.web>
</الموقع>
3. بعد تسجيل الدخول بنجاح، يجب إنشاء تذكرة التحقق من الهوية للإشارة إلى وفاة المستخدم القانوني المصادق عليه؛
إذا (تم تسجيل الدخول بنجاح)
System.Web.Security.FormsAuthentication.SetAuthCookie(username, false);
4. الوصول إلى ملف Web.config يمكنك الوصول إلى ملف Web.config باستخدام مجموعة السلسلة الثابتة ConfigurationSettings.AppSettings: احصل على سلسلة الاتصال التي تم إنشاؤها في المثال أعلاه. على سبيل المثال:
سلسلة ثابتة محمية Isdebug = ConfigurationSettings.AppSettings["scon"]
تحسين أداء asp.Net.
(1).حدد طريقة تخزين حالة الجلسة
التكوين في ملف Webconfig:
<وضع حالة الجلسة = "؟؟؟" StateConnectionString = "tcpip = 127.0.0.1:42424"
sqlConnectionString = "مصدر البيانات = 127.0.0.1؛ Trusted_Connection = نعم"
Cookieless = "false" مهلة = "20"/>
لدى ASP.NET ثلاث طرق لتخزين معلومات حالة الجلسة:
1. المخزنة في العملية: وضع السمة = InProc
الميزات: يتمتع بأفضل أداء وأسرع سرعة، ولكن لا يمكن مشاركته عبر خوادم متعددة.
2. مخزنة في خادم الحالة: وضع السمة = "StateServer"
الميزات: استخدم هذه الطريقة عندما يلزم الحفاظ على معلومات جلسة المستخدم عبر الخوادم.
ولكن يتم تخزين المعلومات على خادم الدولة، وبمجرد فشل خادم الحالة، سيتم فقدان المعلومات
3. المخزنة في خادم SQL: وضع السمة = "SqlServer"
الميزات: سوف يصبح عبء العمل أكبر، ولكن لن يتم فقدان المعلومات.
شيء آخر:
1. نظرًا لأن بعض الصفحات لا تتطلب حالة الجلسة، فيمكن تعطيل حالة الجلسة:
الكود كما يلي: <%@ Page EnableSessionState="false" %>
II. إذا كانت الصفحة تحتاج إلى الوصول إلى متغيرات الجلسة ولكن لا يُسمح لها بتعديلها، فيمكنك ضبط حالة جلسة الصفحة للقراءة فقط:
الكود كما يلي: <%@ Page EnableSessionState="false" %>
عند استخدامه، يمكنك اختيار طريقة معينة وفقًا للحالة المحددة
(2).استخدم Page.IsPostBack
يشير Page.IsPostBack إلى ما إذا كان قد تم إرجاعه من العميل عند التشغيل لأول مرة، ولا يتم إرجاعه من العميل
إذا كانت خاطئة، عند تشغيل حدث على الصفحة أو تحديث الصفحة، تصبح قيمة Page.IsPostBack صحيحة لأنها إعادة نشر؛
يستخدم بشكل عام في: طريقة Page_Load:
Page_Load (مرسل الكائن، EventArgs e) باطلة خاصة
{
إذا (!Page.IsPostBack)
{
....; // رمز لتهيئة الصفحة. يتم تنفيذ هذه الرموز عند تهيئة الصفحة لأول مرة، وعند إعادة نشرها للمرة الثانية،
// لن يتم تنفيذه مرة أخرى. تحسين الكفاءة.
}
}
في كثير من الأحيان يجب استخدام IsPostBack لأن بعض عناصر التحكم تحتاج إلى الحفاظ على حالتها بعد التهيئة.
على سبيل المثال: DropDownList، إذا تمت تهيئته في كل مرة، بغض النظر عن الخيار الذي يحدده المستخدم، فسيتم تهيئته إلى القيمة الافتراضية.
(3). تجنب استخدام ضوابط الخادم
1. للحصول على معلومات العرض الثابتة العامة، حاول عدم استخدام عناصر التحكم من جانب الخادم لعرضها نظرًا لأن عناصر التحكم من جانب الخادم تحتاج إلى النشر مرة أخرى إلى الخادم للتنفيذ.
وسوف يقلل من كفاءة تنفيذ البرنامج، وبشكل عام، يمكن عرضه باستخدام <DIV>.
إذا تم استخدام عناصر التحكم من جانب الخادم، فإن إزالة: runat = "server" ستؤدي أيضًا إلى تحسين الكفاءة.
2. قم بتعطيل عرض الحالة لعناصر التحكم من جانب الخادم. لا تحتاج بعض عناصر التحكم إلى الحفاظ على حالتها. يمكنك تعيين خصائصها: EnableViewState=false;
إذا لم يكن عنصر التحكم في الصفحة بالكامل بحاجة إلى الاحتفاظ بعرض الحالة، فيمكنك ضبط عرض الحالة للصفحة بأكملها على خطأ:
الكود كما يلي: <%@ Page EnableViewState="false"%>
3. قم بالتكوين في ملف Web.Config:
يمكن تكوين جلسات asp.NET في عنصر Sessionsstate في Web.config أو Machine.config.
فيما يلي مثال للإعدادات في Web.config:
<Sessionsstate timeout = "10" cookieless = "false" mode = "Inproc" />
(4). تجنب استخدام DataGrid
يعلم الجميع أن DataGrid قوية. ومع ذلك، على الرغم من قوتها، إلا أنها تزيد أيضًا من حمل الأداء. استخدم عناصر التحكم الأخرى بشكل عام: DataList
أو يمكن للتحكم في المكرر تحقيق ذلك، حاول عدم استخدام DataGrid.
(5).عمليات السلسلة
1. تجنب عمليات الملاكمة حيث تكون عمليات التعبئة أقل كفاءة.
على سبيل المثال، قم بتشغيل مقتطفين من التعليمات البرمجية:
اختبار السلسلة = ""؛
ل(من أجل int i=0;i<10000;i++)
{
اختبار = اختبار + أنا؛
}
و
اختبار السلسلة = ""؛
ل(من أجل int i=0;i<10000;i++)
{
test = test + i.ToString();
}
من الواضح أن مقتطف التعليمات البرمجية أدناه أكثر كفاءة نظرًا لأن i عدد صحيح، يجب على النظام أولاً تحويل i إلى نوع سلسلة قبل الاتصال.
يمكن للقراء نسخه على أجهزتهم الخاصة واختباره.
2. استخدم فئة StringBulider
عند إجراء تسلسل السلسلة: string str = str1 + str2 + ....;
بشكل عام، من الأفضل استخدام StringBuilder بدلاً من فئة السلسلة لأكثر من ثلاث اتصالات. يمكن أن يتجنب StringBuilder إعادة إنشاء كائنات السلسلة.
فقدان الأداء.
يستخدم بشكل عام عند تجميع عبارات SQL: StringBulider.
يمكن للقراء اختباره على أجهزتهم الخاصة.
3. استخدم أقل قدر ممكن:
يحاول
{}
يمسك
{}
أخيراً
{}
البيان: كفاءة تنفيذ هذا البيان منخفضة نسبيًا.
(6) تحسين استخدام ADO.Net
1. يتم فتح وإغلاق اتصالات قاعدة البيانات. افتح عند الحاجة إلى اتصال، وأغلق الاتصال فورًا بعد الوصول إلى قاعدة البيانات.
على سبيل المثال، دعونا نلقي نظرة على مقتطفين من التعليمات البرمجية:
أنا.
DataSet ds = new DataSet();
SqlConnection MyConnection = new SqlConnection("server=localhost; uid=sa; pwd=; قاعدة البيانات=NorthWind");
SqlCommand myCommand = new SqlCommand(strSql,MyConnection);
SqlDataAdapter myAdapter=new SqlDataAdapter(queryStr,connectionStr);
MyConnection.Open(); // افتح الاتصال
for(int i=0;i<1000;i++) //for حلقة تحاكي عمليات منطق الأعمال قبل الحصول على البيانات
{
Thread.Sleep(1000);
}
myAdapter.Fill(ds);
for(int i=0;i<1000;i++) //for حلقة تحاكي عمليات منطق الأعمال بعد الحصول على البيانات
{
Thread.Sleep(1000);
}
MyConnection.Close(); // أغلق الاتصال
ثانيا.
DataSet ds = new DataSet();
SqlConnection MyConnection = new SqlConnection("server=localhost; uid=sa; pwd=; قاعدة البيانات=NorthWind");
SqlCommand myCommand = new SqlCommand(strSql,MyConnection);
SqlDataAdapter myAdapter=new SqlDataAdapter(queryStr,connectionStr);
for(int i=0;i<1000;i++) //for حلقة تحاكي عمليات منطق الأعمال قبل الحصول على البيانات
{
Thread.Sleep(1000);
}
MyConnection.Open(); // افتح الاتصال
myAdapter.Fill(ds);
MyConnection.Close(); // أغلق الاتصال
for(int i=0;i<1000;i++) //// تحاكي حلقة for عملية منطق الأعمال بعد الحصول على البيانات
{
Thread.Sleep(1000);
}
رمز العرض II أفضل بكثير من رمز I. يحتل رمز I الاتصال مبكرًا، إذا كان هناك العديد من المستخدمين، فمن المحتمل أن يكون تجمع الاتصال ممتلئًا. في الحالات الشديدة، قد يحدث حادث.
2. استعلام قاعدة البيانات
1. إنشاء عبارات SQL مباشرة. يجب على SQL Server تجميعه في كل مرة، ولن يكون هناك تحسن كبير في الأداء. وبالإضافة إلى ذلك، فهي ليست آمنة بما فيه الكفاية. هاجم بسهولة.
II. استخدم أمر SQL مع المعلمات. بهذه الطريقة، يقوم خادم SQL بتجميعها مرة واحدة فقط، ويمكن إعادة استخدام الأوامر المترجمة لمعلمات مختلفة. تحسين الأداء.
III. استخدم الإجراءات المخزنة لخادم SQL مرة واحدة، وهي مستقلة وسهلة التعديل والصيانة، ويمكنها إكمال وظيفة إرسال البيانات عدة مرات في وقت واحد.
تدفق. الإجراءات المخزنة ليست بالضرورة أكثر كفاءة من البيانات إذا كان منطق الأعمال معقدًا للغاية، ففي بعض الأحيان تكون البيانات أكثر كفاءة من الإجراءات المخزنة.
(6) تحسين ذاكرة التخزين المؤقت
هناك نوعان من ذاكرة التخزين المؤقت: ذاكرة التخزين المؤقت للصفحة وذاكرة التخزين المؤقت لواجهة برمجة التطبيقات.
1. استخدم التخزين المؤقت للصفحة والتخزين المؤقت للأجزاء
<%@ OutputCache Duration="5" VaryByParam="None"%>
<%@ OutputCache Duration=60 VaryByParam=”TextBox1,TextBox2” %>
ملحوظة: المدة هي تحديد وقت انتهاء صلاحية ذاكرة التخزين المؤقت؛
VarByParam هو ما إذا كان الإعداد يتغير وفقًا للمعلمات عندما لا يكون هناك شيء، تستخدم كافة المعلمات نفس ذاكرة التخزين المؤقت.
عند تعيين TextBox1، قم بتخزينها مؤقتًا بشكل منفصل وفقًا لقيم مختلفة لـ TextBox1، وعندما تكون هناك معلمات متعددة، قم بتخزينها معًا؛
2. API ذاكرة التخزين المؤقت. للاستخدام في التطبيقات
I. مثال على استخدام ذاكرة التخزين المؤقت:
http://blog.csdn.net/chengking/archive/2005/10/03/494545.aspx
II. انتبه إلى الفرق بين Page.Cache وHttpContext.Current.Cache عند استخدام:
وهي تشير إلى نفس الكائن. في الصفحة، استخدم Page.Cache. إذا كنت تستخدمه في global.asax أو الفئة الخاصة بك: HttpContext.Current.Cache، ففي بعض الأحداث، نظرًا لعدم وجود HttpContext، استخدم HttpRuntime.Cache.