مقالات سایت نیوشا     آموزش دات نت

  منبع :   sakha ravesh.co
  تعداد بازدید :   1 بار
  امکانات کاربر :
نسخه چاپی ایمیل گیرنده : 
  يک شنبه ٢٢ شهريور ١٣٨٨
 

ايجاد يک برنامه وب نمونه در دات نت ( بخش سوم )

فاز سوم : اشکال زدائی برنامه  
اشکال زدائی يک برنامه از جمله مواردی است که هر برنامه نويس با آن سروکار خواهد داشت و لازم است برای تشخيص اشکال موجود در برنامه ( گرامری ، منطقی ، زمان اجراء ) از پتانسيل فوق  استفاده تا در زمان مطلوب اشکال موجود در برنامه تشخيص و برطرف گردد . ويژوال استوديو دات نت ، دارای امکانات متعددی در جهت اشکال زدائی برنامه های نوشته شده در محيط دات نت بوده و برنامه های وب نيز از اين قاعده مستثنی نبوده و می توان از امکانات موجود در جهت رفع اشکال آنان استفاده نمود.در فاز سوم ايجاد يک برنامه وب ، با نحوه اشکال زدائی ( Debug  ) يک برنامه وب ASP.NET در ويژوال استوديو دات نت ، آشنا شده و به بررسی مواردی همچون تنظيم Break Points ، استفاده از Intellisense در ديباگ و نوشتن در پنجره خروجی ، خواهيم پرداخت .

  • مرحله اول : فعال نمودن امکان دیباگ در برنامه های وب

  • مرحله دوم : تنظیم برک پوینت (Break Point)

  • مرحله سوم : اشکال زدایی هوشمند

  • مرحله چهارم : استفاده از Debug.write 

 فاز سوم : اشکال زدائی برنامه 

 مرحله اول : فعال نمودن امکان ديباگ در برنامه های وب  ، در اين مرحله با نحوه فعال نمودن ديباگ در برنامه های وب ASP.NET با استفاده از فايل Web.Config آشنا خواهيم شد.

  • فعال نمودن پنجره  Solution Explorer  ( انتخاب گزينه Solution Explorer از طريق منوی View و يا فشردن  کليد های CTRL+ALT+L )

  • فعال نمودن فايل Web.Confing موجود در پنجره Solution Explorer 

 

  • از فايل Web.Config برای تعريف و مقداردهی پارامترهای لازم در ارتباط با پيکربندی برنامه استفاده می گردد . در اين رابطه ، لازم است از وجود  دستورالعمل زير در بخش  <system.web>   ، اطمينان حاصل گردد.

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 ) متوقف و آن را به رنگ زرد ، نمايش خواهد داد :

مرحله سوم : اشکال زدائی هوشمند  : در اين مرحله با نحوه استفاده از اشکال زدائی هوشمندانه ، آشنا خواهيم شد.

  • حرکت موس و استقرار آن بر روی بخش Text مربوط به txtUserID.Text . در چنين حالتی يک Tool tip و با مقدار " Srco " ، نمايش داده می شود.

  • حرکت موس و استقرار آن بر روی بخش Length  مربوط به txtUserID.Text.Length  . در چنين حالتی يک Tool tip و با مقدار " 4 " ، نمايش داده می شود .

  • فعال نمودن پنجره Command ( انتخاب Debug | Windows | Immediate )

 

  • تايپ دستور " txtUserID ?"،  در ادامه تمامی تمامی خصلت های مربوطه نمايش خواهد داد .

 

 

  • انتخاب خصلت Text و فشردن کليد Enter . فشردن مجدد کليد Enter به منظور نمايش مقدار موجود در خصلت Text در کنترل txtUserID

 

مرحله چهارم : استفاده از Debug.write  : در اين مرحله با نحوه استفاده از Debug.Write به منظور نوشتن خروجی در پنجره خروجی ، آشنا خواهيم شد .

  • مشاهده صفحه Code Behind ( انتخاب View | Code ، فعال نمودن کليد F7 ، کليک سمت راست برروی صفحه Login.aspx در پنجره Solution Explorer و انتخاب گزينه View Code

  • افزودن کد زير درابتدای صفحه Login.aspx.vb .

Add Line

imports System.Diagnostics

  • اضافه نمودن کد زير به  انتهای متد btnSignin_Click

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

  • راه اندازی سرويس دهنده وب IIS ( تايپ دستور iisreset از طريق خط دستور )

نتايج  فاز سوم   :

  • فعال نمودن ديباگ در برنامه های وب
  • ايجاد Break point
  • اشکال زدائی هوشمند
  • استفاده از Debug.write
  • آشنائی با برخی اشکالات موجود در زمان فعال نمودن ديباگ
     

فاز چهارم : مديريت وضعيت برنامه  
برنامه های وب از معماری سرويس گيرنده و سرويس دهنده تبعيت می نمايند .اين بدان معنی است که بخشی از برنامه بر روی کامپيوتر سرويس گيرنده و بخشی ديگر بر روی سرويس دهنده اجراء و با همياری و همکاری يکديگر ، اهداف تعريف شده در برنامه را دنبال می نمايند. سرويس گيرنده و سرويس دهنده برای ارتباط با يکديگر می بايست از مجموعه ای قوانين مدون ( پروتکل ) استفاده نمايند. در اين راستا از پروتکل HTTP ، استفاده می گردد . ماهيت پروتکل فوق بصورت Stateless  می باشد ، اين بدان معنی است که ارتباط ايجاد شده صرفا" برای يک تراکنش ، نگهداری می گردد .
قبل از اين که يک سرويس گيرنده و سرويس دهنده قادر به مبادله اطلاعات باشند ، می بايست بين آنان يک ارتباط ( Connection ) ايجاد گردد . سرويس گيرنده و سرويس دهنده با استفاده از پروتکل TCP/IP يک ارتباط را برقرار می نمايند . سرويس دهندگان و سرويس دهندگان از پروتکل HTTP برای ارسال درخواست ها و پاسخ به درخواست ها ، استفاده می نمايند . سرويس دهنده  وسرويس گيرنده  ارتباط ايجاد شده را صرفا" برای يک تراکنش نگهداری و در اين راستا ، چهار مرحله عمليات دنبال خواهد شد .

  •  مرحله اول : ايجاد ارتباط . در اين مرحله با استفاده از پروتکل TCP/IP يک ارتباط بين سرويس گيرنده و سرويس دهنده برقرار می گردد . برای تشخيص نوع پروتکل ها ، برنامه ها از يک عدد صحيح منحصر بفرد که " شماره پورت " ، ناميده می شود ، استفاده می نمايند . جدول زير برخی از پروتکل های رايج و شماره پورت نسبت داده شده به آنان را نشان می دهد.

پروتکل

شماره پورت

FTP

21
Telnet 23
SMTP 25
HTTP 80
... ...
  • مرحله دوم :ايجاد يک درخواست توسط سرويس گيرنده . در دومين مرحله ، سرويس گيرنده اقدام به ايجاد يک درخواست و ارسال آن برای سرويس دهنده وب می نمايد.

  • مرحله سوم : پاسخ سرويس دهنده وب .پس از دريافت و تفسير درخواست ارسالی، سرويس دهنده پاسخ لازم را برای سرويس گيرنده ارسال می نمايد.

  • مرحله چهارم : قطع ارتباط بين سرويس دهنده و سرويس گيرنده .سرويس دهنده مسئوليت قطع ارتباط با سرويس گيرنده پس از پردازش و پاسخگوئی به درخواست را برعهده دارد .مسئوليت فوق در انحصار سرويس دهنده نبوده و سرويس گيرنده نيز می بايست توانائی غيرفعال نمودن ارتباط ايجاد شده را داشته باشد . مثلا" در صورتی که شما بر روی دکمه Stop مرورگر خود کليک نمائيد ، مرورگر می بايست توانائی غيرفعال نمودن ارتباط ايجاد شده را دارا باشد .

برنامه های وب با توجه به واقعيت های موجود در رابطه با ماهيت پروتکل HTTP خصوصا" ويژگی Stateless آن می بايست از راهکاری متعددی به منظور نگهداری داده در بين تراکنش های متعدد بين سرويس گيرنده و سرويس دهنده استفاده نمايند( Round trips ). اهميت موضوع فوق تا به آن اندازه است که هر يک از تکنولوژی های موجود که از آنان به منظور پياده سازی برنامه های وب استفاده می شود ، به مقوله " مديريت وضعيت برنامه "  ( State Management ) ، با دقت پرداخته و در اين راستا گزينه های متعددی را در اختيار طراحان و پياده کنندگان برنامه های وب قرار می دهند . با توجه به ماهيت برنامه های وب (جايگاه سرويس گيرنده وسرويس دهنده ) ، راهکارهای ارائه شده دارای گرايش سمت سرويس دهنده و يا سمت سرويس گيرنده می باشند .
با اين مقدمه طولانی و خسته کننده !  به بررسی مديريت وضعيت برنامه با تاکيد بر امکانات ارائه شده سمت سرويس گيرنده و سرويس دهنده در دات نت ، خواهيم پرداخت . در اين راستا هدف ، تشريح تمامی امکانات ارائه شده نبوده و صرفا" قصد داريم با ذکر نمونه هائی به  بررسی دو رويکرد فوق ( سمت سرويس گيرنده ، سمت سرويس دهنده ) ، بپردازيم  .

  • مرحله اول : مديريت وضعيت برنامه سمت سرويس گيرنده

  • مرحله دوم : مديريت وضعيت برنامه سمت سرويس دهنده

مرحله اول : مديريت وضعيت برنامه سمت سرويس گيرنده  : با توجه به ماهيت Stateless بودن پروتکل استفاده شده برای ارتباط بين سرويس گيرنده و سرويس دهنده ، می بايست از امکانات و روش های خاصی برای نگهداری مقاديرمتغيرهای يک صفحه و کنترل ها  بر روی  سرويس گيرنده و يا سرويس دهنده ، استفاده نمود. برای نگهداری داده بر روی سرويس گيرنده از ViewState استفاده می شود . در اين مرحله با نحوه استفاده از شی ViewState برای نگهداری مقدار " رمز عبور " بر روی سرويس گيرنده استفاده می شود . در اين رابطه مراحل زير را دنبال می نمائيم :

  • استفاده از شی ViewState برای نگهداری داده درج شده در فيلد "رمز  عبور " . بدين منظور کد زير را در انتهای متد btnSignin_Click  ، اضافه می نمائيم .بدين ترتيب پس از فعال شدن متد فوق ، مقدار درج شده در فيلد "رمز عبور" ، بر روی سرويس گيرنده ، نگهداری می گردد .

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

  • سوئيچ به Design view ( انتخاب View | Designer و يا فعال نمودن کليدهای SHIFT + F7 )

  • کليک ( Double ) بر روی دکمه " انصراف" و افزودن کد زير در تابع مسئول به پاسخگودی به رويداد btnRestore_Click

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

  • برای دستيابی به مقدار session در صفحه ای  ديگر ، يک فرم جديد را ايجاد می نمائيم :
    مرحله اول :  فعال نمودن پنجره  Solution Explorer  ( انتخاب گزينه Solution Explorer از طريق منوی View )
    مرحله دوم : انتخاب Project | Add Web Form برای افزودن يک فرم وب جديد( نمايش جعبه محاوره ای Add New Item )
    مرحله سوم : انتخاب  نام مورد نظر برای فرم وب ( LoginDemo.aspx )  و درج آن در فيلد Name و فعال نمودن دکمه Open


            مرحله چهارم :  پس از انجام مراحل فوق ، فرم وب 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 برای نگهداری داده (  سمت سرويس دهنده )

در بخش چهارم اين مقاله به بررسی ساير  فازهای تعريف شده برای حل مسئله نمونه  ، خواهيم پرداخت .

 
 
 

  پشتیبانی NOD32   
 
١٤ نفر کاربران آنلاين :
٥١ نفر   بازديد امروز :
٤٧١٣٦ نفر  کل بازديد ها :