|
ايجاد يک برنامه وب نمونه در دات نت ( بخش سوم )
فاز سوم : اشکال زدائی برنامه
اشکال زدائی يک برنامه از جمله مواردی است که هر برنامه نويس با آن سروکار خواهد داشت و لازم است برای تشخيص اشکال موجود در برنامه ( گرامری ، منطقی ، زمان اجراء ) از پتانسيل فوق استفاده تا در زمان مطلوب اشکال موجود در برنامه تشخيص و برطرف گردد . ويژوال استوديو دات نت ، دارای امکانات متعددی در جهت اشکال زدائی برنامه های نوشته شده در محيط دات نت بوده و برنامه های وب نيز از اين قاعده مستثنی نبوده و می توان از امکانات موجود در جهت رفع اشکال آنان استفاده نمود.در فاز سوم ايجاد يک برنامه وب ، با نحوه اشکال زدائی ( Debug ) يک برنامه وب ASP.NET در ويژوال استوديو دات نت ، آشنا شده و به بررسی مواردی همچون تنظيم Break Points ، استفاده از Intellisense در ديباگ و نوشتن در پنجره خروجی ، خواهيم پرداخت .
-
مرحله اول : فعال نمودن امکان دیباگ در برنامه های وب
-
مرحله دوم : تنظیم برک پوینت (Break Point)
-
مرحله سوم : اشکال زدایی هوشمند
-
مرحله چهارم : استفاده از Debug.write
فاز سوم : اشکال زدائی برنامه
مرحله اول : فعال نمودن امکان ديباگ در برنامه های وب ، در اين مرحله با نحوه فعال نمودن ديباگ در برنامه های وب ASP.NET با استفاده از فايل Web.Config آشنا خواهيم شد.
|
Verify the following line in Web.Config
|
|
<compilation defaultLanguage="vb" debug="true" />
|
مرحله دوم : تنظيم برک پوينت ( Break Points ) : در اين مرحله ، با نحوه ايجاد Breakpoint در يک برنامه وب آشنا خواهيم شد . Break Point ، نقاطی در برنامه هستند که برنامه اجرای خود را تا آن نقطه انجام و با رسيدن به نقطه فوق ، متوقف شده و برنامه نويس می تواند مقادير متغيرها ، خروجی و ساير موارد مرتبط با عملکرد برنامه را مشاهده و بر اساس مشاهدات فوق ، اقدام به اشکال زدائی برنامه نمايد.
-
فعال نمودن فايل Login.aspx ( کليک مضاعف بر روی فايل فوق از طريق Solution Explorer )
-
مشاهده صفحه Code Behind ( انتخاب View | Code ، فعال نمودن کليد F7 ، کليک سمت راست برروی صفحه Login.aspx در پنجره Solution Explorer و انتخاب گزينه View Code )
-
انتخاب کد اجرائی زير در فايل Code Behind و گزينه Insert BreakPoint ( کليک سمت راست )
|
Set breakpoint
|
|
If (txtUserID.Text.Length >= 4 And txtPassword.Text.Length >= 4 And txtUserID.Text.StartsWith("S")) ...
|

-
اجرای برنامه ( Debug | Start و يا فعال نمودن کليد F5 )
-
درج مقادير مورد نظر در فيلدهای " نام " و "رمز عبور " ( Srco و Srcopassword )
-
کليک بر روی دکمه " ورود به سايت "
-
ديباگر در خط مشخص شده ( Break Point ) متوقف و آن را به رنگ زرد ، نمايش خواهد داد :
مرحله سوم : اشکال زدائی هوشمند : در اين مرحله با نحوه استفاده از اشکال زدائی هوشمندانه ، آشنا خواهيم شد.
مرحله چهارم : استفاده از Debug.write : در اين مرحله با نحوه استفاده از Debug.Write به منظور نوشتن خروجی در پنجره خروجی ، آشنا خواهيم شد .
-
مشاهده صفحه Code Behind ( انتخاب View | Code ، فعال نمودن کليد F7 ، کليک سمت راست برروی صفحه Login.aspx در پنجره Solution Explorer و انتخاب گزينه View Code )
-
افزودن کد زير درابتدای صفحه Login.aspx.vb .
|
Add Line
|
|
imports System.Diagnostics
|
|
Add lines
|
|
Private Sub btnSignin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSignin.Click
...
Debug.WriteLine(txtUserID.Text)
Debug.WriteLine(txtPassword.Text)
Debug.Write(lblResult.Text)
End Sub
|
-
حذف Break point ايجا د شده در مرحله قبل ( Debug | Clear all break points و يا فعال نمودن کليد های CTRL+SHIFT-F9 )
-
اجرای برنامه ( Debug | Start ، و يا فعال نمودن کليد F5 )
-
نمايش پنجره خروجی ( View | Other Windows | Output و يا فعال نمودن کليدهای CTRL+ALT+O )
-
سوئيچ به پنجره مرورگر
-
درج داده مورد نظر در فيلدهای "نام " و " رمز عبور " "( Srco و Srcopassword )
-
کليک بر روی دکمه " ورود به سايت "
-
برگشت به محيط ويژوال استوديو و مشاهده مقادير مربوط به فيلدهای نام ، رمز عبور ، نتايج در پنجره خروجی
توضيحات و رفع اشکالات احتمالی
در زمان فعال نمودن ديباگ در ويژوال استوديو ممکن است با برخی خطاها مواجه و عملا" امکان ديباگ فعال نگردد . در اين رابطه لازم است در ابتدا از فعال شدن ديباگ در ارتباط با پروژه ايجاد شده ، اطمينان حاصل نمائيم . يک پروژه ويژوال استوديو دارای پيکربندی های مجزا برای ديباگ و Relase می باشد . در صورتی که برنامه با استفاده از ويزاردهای مربوطه در ويژوال استوديو ايجاد شده باشد ، ويژوال استوديو به صورت اتوماتيک ، پيکربندی های مربوطه را ايجاد و گزينه های پيش فرض مناسب را برای آنان در نظر گرفته و مقداردهی مناسب آنان راانجام خواهد داد . برای مشاهده و يا تغيير تنظيمات انجام شده در رابطه با پيکربندی ديباگ ، مراحل زير را دنبال می نمائيم :
-
انتخاب پروژه از طريق پنجره Solution Explorer
-
انتخاب Property Pages از طريق منوی View
-
انتخاب Debug ، از طريق ليست Configuration موجود در جعبه محاوره ای Project> Property Pages >
-
فعال نمودن فولدر Configuration Properties و انتخاب تنظيمات مورد نظری که قصد تغيير آنان را داريم .
-
ويرايش مقادير مورد نظر در پنجره Properties
در زمان ديباگ نمودن يک برنامه وب ASP.NET برروی کامپيوتری که ويندوز 200 ( نسخه Server ) به عنوان Domain controller به همراه Service Pack 4 نصب شده باشد ، ممکن است با خطای زير مواجه شويم :
علت اشکال فوق به Account استفاده شده برای اجرای ASP.NET Worker Process ( به صورت پيش فرض IWAM بر روی Domain Controller می باشد ) مربوط می گردد که دارای مجوز "Impersonate a client after authentication" ، در local security policy نمی باشد .مشکل فوق ، در مواردی که Service Pack 4 ويندوز 2000 نصب و در ادامه ويژوال استوديو نصب شده باشد، محقق می گردد. در چنين وضعيتی IWAM account دارای مجوز اشاره شده در local security policy نمی باشد . مجوز "Impersonate a client after authentication" ، ( به آن SeImpersonatePrivilege نيز گفته می شود ) يک تنظيم امنيتی جديد است که اولين مرتبه در Service pack 4 ويندوز 2000 ، ارائه شده است . برای حل مشکل فوق ، مراحل زير را دنبال می نمائيم :
-
فعال نمودن Domain Controller Security Policy ( از طريق Start|Programs|Administrative Tools )
-
کليک بر روی Security Settings
-
کليک بر روی Local Policies و در ادامه کليک بر روی User Rights Assignment
-
از طريق پانل سمت راست ، Double Click بر روی Impersonate a client after authentication
-
در پنجره Security Policy Setting ، کليک بر روی Define these policy settings
-
فعال نمودن دکمه Add و در ادامه Browse
-
در پنجره Select Users or Groups ، انتخاب IWAM account ، کليک بر روی دکمه Add و فشردن دکمه OK
-
فعال نمودن دکمه OK ( دو مرتبه )
-
برای بهنگام سازی سياست امنيتی جديد تعريف شده ، دستور زير را از طريق خط دستور تايپ و اجراء می نمائيم
|
Enforce an update of the computer policy
|
|
secedit /refreshpolicy machine_policy /enforce
|
نتايج فاز سوم :
فاز چهارم : مديريت وضعيت برنامه
برنامه های وب از معماری سرويس گيرنده و سرويس دهنده تبعيت می نمايند .اين بدان معنی است که بخشی از برنامه بر روی کامپيوتر سرويس گيرنده و بخشی ديگر بر روی سرويس دهنده اجراء و با همياری و همکاری يکديگر ، اهداف تعريف شده در برنامه را دنبال می نمايند. سرويس گيرنده و سرويس دهنده برای ارتباط با يکديگر می بايست از مجموعه ای قوانين مدون ( پروتکل ) استفاده نمايند. در اين راستا از پروتکل HTTP ، استفاده می گردد . ماهيت پروتکل فوق بصورت Stateless می باشد ، اين بدان معنی است که ارتباط ايجاد شده صرفا" برای يک تراکنش ، نگهداری می گردد .
قبل از اين که يک سرويس گيرنده و سرويس دهنده قادر به مبادله اطلاعات باشند ، می بايست بين آنان يک ارتباط ( Connection ) ايجاد گردد . سرويس گيرنده و سرويس دهنده با استفاده از پروتکل TCP/IP يک ارتباط را برقرار می نمايند . سرويس دهندگان و سرويس دهندگان از پروتکل HTTP برای ارسال درخواست ها و پاسخ به درخواست ها ، استفاده می نمايند . سرويس دهنده وسرويس گيرنده ارتباط ايجاد شده را صرفا" برای يک تراکنش نگهداری و در اين راستا ، چهار مرحله عمليات دنبال خواهد شد .
|
پروتکل
|
شماره پورت
|
|
FTP
|
21 |
| Telnet |
23 |
| SMTP |
25 |
| HTTP |
80 |
| ... |
... |
-
مرحله دوم :ايجاد يک درخواست توسط سرويس گيرنده . در دومين مرحله ، سرويس گيرنده اقدام به ايجاد يک درخواست و ارسال آن برای سرويس دهنده وب می نمايد.
-
مرحله سوم : پاسخ سرويس دهنده وب .پس از دريافت و تفسير درخواست ارسالی، سرويس دهنده پاسخ لازم را برای سرويس گيرنده ارسال می نمايد.
-
مرحله چهارم : قطع ارتباط بين سرويس دهنده و سرويس گيرنده .سرويس دهنده مسئوليت قطع ارتباط با سرويس گيرنده پس از پردازش و پاسخگوئی به درخواست را برعهده دارد .مسئوليت فوق در انحصار سرويس دهنده نبوده و سرويس گيرنده نيز می بايست توانائی غيرفعال نمودن ارتباط ايجاد شده را داشته باشد . مثلا" در صورتی که شما بر روی دکمه Stop مرورگر خود کليک نمائيد ، مرورگر می بايست توانائی غيرفعال نمودن ارتباط ايجاد شده را دارا باشد .
برنامه های وب با توجه به واقعيت های موجود در رابطه با ماهيت پروتکل HTTP خصوصا" ويژگی Stateless آن می بايست از راهکاری متعددی به منظور نگهداری داده در بين تراکنش های متعدد بين سرويس گيرنده و سرويس دهنده استفاده نمايند( Round trips ). اهميت موضوع فوق تا به آن اندازه است که هر يک از تکنولوژی های موجود که از آنان به منظور پياده سازی برنامه های وب استفاده می شود ، به مقوله " مديريت وضعيت برنامه " ( State Management ) ، با دقت پرداخته و در اين راستا گزينه های متعددی را در اختيار طراحان و پياده کنندگان برنامه های وب قرار می دهند . با توجه به ماهيت برنامه های وب (جايگاه سرويس گيرنده وسرويس دهنده ) ، راهکارهای ارائه شده دارای گرايش سمت سرويس دهنده و يا سمت سرويس گيرنده می باشند .
با اين مقدمه طولانی و خسته کننده ! به بررسی مديريت وضعيت برنامه با تاکيد بر امکانات ارائه شده سمت سرويس گيرنده و سرويس دهنده در دات نت ، خواهيم پرداخت . در اين راستا هدف ، تشريح تمامی امکانات ارائه شده نبوده و صرفا" قصد داريم با ذکر نمونه هائی به بررسی دو رويکرد فوق ( سمت سرويس گيرنده ، سمت سرويس دهنده ) ، بپردازيم .
مرحله اول : مديريت وضعيت برنامه سمت سرويس گيرنده : با توجه به ماهيت Stateless بودن پروتکل استفاده شده برای ارتباط بين سرويس گيرنده و سرويس دهنده ، می بايست از امکانات و روش های خاصی برای نگهداری مقاديرمتغيرهای يک صفحه و کنترل ها بر روی سرويس گيرنده و يا سرويس دهنده ، استفاده نمود. برای نگهداری داده بر روی سرويس گيرنده از ViewState استفاده می شود . در اين مرحله با نحوه استفاده از شی ViewState برای نگهداری مقدار " رمز عبور " بر روی سرويس گيرنده استفاده می شود . در اين رابطه مراحل زير را دنبال می نمائيم :
|
Client-Side State Management
|
|
Private Sub btnSignin_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSignin.Click
. ......
ViewState("Password") = txtPassword.Text
End Sub
|
|
Client side State management using ViewState
|
|
Private Sub btnRestore_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRestore.Click
lblResult.Text = " رمز عبور وارد شده " & CStr (ViewState("Password"))
End Sub
|
-
اجرای برنامه ( Debug | Start و يا فعال نمودن کليد F5 )
-
درج داده ورودی در فيلدهای "نام " و "رمز عبور" ( Srco,Srcopassword )
-
کليک بر روی دکمه "ورود به سايت "
-
پس از فعال نمودن دکمه "ورود به سايت " ، يک round trip به سرويس دهنده محقق شده و مقدار فيلد "رمز عبور" در شی ViewState نگهداری می گردد ( فيلد txtPassword خالی است ).
-
کليک بر روی دکمه " انصراف "
-
پس از فعال نمودن دکمه فوق ، رمز عبور ورودی در lblResult ، نمايش داده می شود .
مرحله دوم : مديريت وضعيت برنامه سمت سرويس دهنده : در اين مرحله از شی Session برای نگهداری نام درج شده در فيلد "نام " ، بر روی سرويس دهنده استفاده می نمائيم . بدين منظور مراحل زير را دنبال می نمائيم :
-
سوئيچ به صفحه Code behind مربوط به صفحه Login.aspx ( انتخاب View | Code و يا فعال نمودن کليد F7 )
-
استفاده از شی Session برای نگهداری مقدار درج شده در فيلد "نام" ( افزودن کد زير به متد btnSignin_Click )
|
Server side State management using Session
|
|
Private Sub btnSignin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSignin.Click
If (txtUserID.Text.Length >= 4 And txtPassword.Text.Length >= 4 And txtUserID.Text.StartsWith("S")) Then
lblResult.Text = "کاربر مجاز "
Session("UserID") = txtUserID.Text
Response.Redirect("LoginDemo.aspx")
Else
lblResult.Text = "کاربر غير مجاز"
End If
ViewState("Password") = txtPassword.Text
End Sub
|
مرحله چهارم : پس از انجام مراحل فوق ، فرم وب LoginDemo.aspx ايجاد و به پروژه اضافه می گردد .
-
برای نمايش " نام " ، يک کنترل Label را بر روی فرم LoginDemo.aspx ايجاد می نمائيم .
مرحله اول : سوئيچ به حالت Design ( کليک بر روی Design Tab )
مرحله دوم : فعال نمودن پنجره Toolbox ( انتخاب گزينه Toolbox از طريق منوی View و يا فشردن کليدهای CTRL+ALT+X )
مرحله سوم : انتخاب کنترل Label ازطريق Web Forms tab موجود در Toolbox و استفرار آن بر روی فرم وب
مرحله چهارم : تنظيم خصلت های زير برای کنترل Label استفاده شده بر روی فرم وب . ( برای مشاهده پنجره Properties مربوط به يک کنترل ، پس از انتخاب کنترل دستور View|Properties را فعال و يا از کليد F4 ، استفاده می نمائيم ) .
|
تنظيم خصلت های کنترل Label
|
|
خصلت
|
مقدار
|
|
ID
|
lblUserID
|
|
Text
|
شما با اين نام وارد سايت فرآیند گستر نیوشا شده ايد
|
-
سوئيچ به صفحه Code behind مربوط به صفحه LoginDemo.aspx ( انتخاب View | Code و يا فعال نمودن کليد F7 )
-
افزودن کد زير در متد Page_Load ( بازيابی مقدار "نام " از طريق Session ايجاد شده در صفحه Login.aspx )
|
Page_Load method
|
|
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
lblUserID.Text = lblUserID.Text & " " & Session("UserID")
End If
End Sub
|
-
اجرای برنامه ( Debug | Start و يا فعال نمودن کليد F5 )
-
درج داده ورودی در فيلدهای "نام " و "رمز عبور" ( Srco,Srcopassword )
-
کليک بر روی دکمه "ورود به سايت " ( نام درج شده در فيلد "نام " ، در Session ذخيره می گردد )
-
در ادامه کاربر به صفحه ديگر ( LoginDemo.aspx ) هدايت و از طريق صفحه فوق پيام : " " ، نمايش داده می شود .
نتايج فاز چهارم :
- آشنائی با مفهوم stateless بودن پروتکل HTTP
- استفاده از ViewState برای نگهداری داده ( سمت سرويس گيرنده )
- استفاده از شی Session برای نگهداری داده ( سمت سرويس دهنده )
در بخش چهارم اين مقاله به بررسی ساير فازهای تعريف شده برای حل مسئله نمونه ، خواهيم پرداخت .
|