آموزش عیب یابی و اشکال زدایی برنامه های MVC توسط Glimpse

در این مقاله با نحوه کار ابزار Glimpse برای اشکال زدایی و بررسی کارآیی وب سایت‌های MVC آشنا خواهیم شد.

آموزش عیب یابی و اشکال زدایی برنامه های MVC توسط Glimpse

Glimpse یک پکیج NuGet منبع باز پرطرفدار و روبه رشد است که برای ما عملکرد دقیق، اشکال زدایی و تشخیص اطلاعات و داده های برنامه را فراهم می نماید. نصب آن بسیار آسان بوده و این ابزار بسیار کم حجم و پرسرعت می باشد. این ابزار دارای یک کلید در پایین هر صفحه برای معیارهای عملکرد برنامه می باشد. این به شما اجازه تست برنامه بر روی سرور را می دهد. Glimpse برای شما اطلاعات ارزشمندی را فراهم کرده و استفاده از آن در چرخه توسعه برنامه توصیه می شود. همانطور که Fiddler و ابزار توسعه F-12 برای سمت کاربر به شما کمک می کنند Glimpse سمت Server می باشد.

این مقاله روی نحوه استفاده از Glimpse برای MVC و پکیج های EF تمرکز دارد اما پکیج های زیادی شبیه Glimpse موجود هستند. در صورت امکان می توانید سری هم به این سایت (Glimpse docs) بزنید. Glimpse یک پروژه منبع باز بوده که شما می توانید به کدها و اسناد آن دسترسی داشته باشید.

نصب Glimspe

شما می توانید Glimpse را از NuGet package manager console یا از Manage NuGet Packages در ویژوال استادیو نصب نمایید.

در اینجا Mvc5 و EF6 packages نصب شده اند.

 

Glimpse.EF را هم جستجو نمایید.

 

 

با کلیک روی Installed packages در نوار سمت چپ شما می توانید ماژول های نصب شده وابسته به Glimpse را مشاهده نمایید :

 

 

همچنین می توانید از کدهای زیر برای نصب پکیج Glimpse در package manager console استفاده نمایید.

 

PM> Install-Package Glimpse.MVC5
PM> Install-Package Glimpse.EF6

 

فعال کردن Glimpse در Localhost

به لینک http://localhost:<port #>/glimpse.axd رفته و روی دکمه Turn Glimpse On کلیک نمایید.

 

 

اگر شما مانند زیر نوار Favorites Bar را مشاهده می کنید شما می توانید دکمه های Glimpse را کشیده و رها کرده و آنها را اضافه نمایید :
 

 

حالا شما می توانید به صفحات برنامه خود رفته و Heads Up Display یا HUD در پایین صفحه نمایش داده می شود.

 

 

صفحه Glimpse HUD اطلاعات زمان بندی شده را مانند بالا نمایش می دهد. HUD بلافاصله شما را از مشکلات با خبر می کند قبل از آنکه شما به چرخه تست و آزمون بروید. با کلیک روی "g" در سمت راست پایین صفحه پنل Glimpse برای شما باز می شود:

 

 

در تصویر بالا تب Execution انتخاب شده است که اطلاعات زمان بندی شده اکشن ها را نمایش می دهد. شما در این تب می توانید اطلاعات مربوطه به کنترلر MVC را مشاهده کنید.

تب Timeline

کد زیر را مشاهده نمایید:
 

public ActionResult Index(int? id, int? courseID, int ? eager)
{
    var viewModel = new InstructorIndexData();

    viewModel.Instructors = db.Instructors
        .Include(i => i.OfficeAssignment)
        .Include(i => i.Courses.Select(c => c.Department))
        .OrderBy(i => i.LastName);

    if (id != null)
    {
        ViewBag.InstructorID = id.Value;
        viewModel.Courses = viewModel.Instructors.Where(
            i => i.ID == id.Value).Single().Courses;
    }

    if (courseID != null)
    {
       ViewBag.CourseID = courseID.Value;
       // Eager loading
       if (eager != null && eager > 0)
       {
          ViewBag.eagerMsg = "Eager Loading";

          viewModel.Enrollments = viewModel.Courses.Where(
              x => x.CourseID == courseID).Single().Enrollments;

       }
       else { 
        // Explicit loading
          ViewBag.eagerMsg = "Explicit Loading";

        var selectedCourse = viewModel.Courses.Where(x => x.CourseID == courseID).Single();
        db.Entry(selectedCourse).Collection(x => x.Enrollments).Load();
        foreach (Enrollment enrollment in selectedCourse.Enrollments)
        {
            db.Entry(enrollment).Reference(x => x.Student).Load();
        }

        viewModel.Enrollments = selectedCourse.Enrollments;
       }
    }

    return View(viewModel);
}

 

کد بالا به شما اجازه فرستادن در Query String را می دهد. در تصویر بالا بارگذاری Explict انجام شده و صفحه Timing بارگذاری هر ثبت نام را در اکشن متد Index نمایش می دهد :
 

 

در کد زیر eager مشخص شده است و هر ثبت نام بعد از ویو Index صدا زده شده است :
 

 

شما می توانید بین بخش های زمانی برای گرفتن اطلاعات زمان بندی شده بچرخید.

 

Model Binding (مدل اتصال)

تب Model Binding برای شما اطلاعات زیادی فراهم می کند که به شما کمک می کند متوجه شوید چگونه متغیرهای فرم پر می شوند و چرا بعضی از آنها پر نمی شوند با اینکه انتظار می رود پر شوند. در تصویر زیر آیکون ?، برای رفتن به صفحه Help در Glimpse می باشد.

Routes

تب Routes به شما برای اشکال زدایی و فهم مسیریابی کمک می نماید. در تصویر زیر مسیر کالا انتخاب شده است.(قسمت سبزرنگ)

همچنین مسیر Area ها و قسمت ها و غیره نمایش داده می شوند.

استفاده از Glimpse در Azure

سیاست امنیتی پیش فرض Glimpse تنها به داده های Glimspe اجازه نمایش داده شدن را از Localhost می دهد. شما می توانید این سیاست امنیتی را تغییر داده بنابراین می توانید این داده ها را روی سرور Remote نمایش دهید(مانند برنامه Web روی Azure). برای تست در محیط Azure لازم است کد زرد رنگ را به پایین فایل Web.Config اضافه کنید تا Glimpse برای شما فعال گردد.

  <glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
    <runtimePolicies>
      <ignoredTypes>
        <add type="Glimpse.AspNet.Policy.LocalPolicy, Glimpse.AspNet"/>
      </ignoredTypes>
    </runtimePolicies>
  </glimpse>
</configuration>

با این تغییر کوچک همه کاربرها می توانند داده های Glimpse شما را روی Remote Site ببینند. برای محدود کردن داده های Glimpse ما یک نقش canViewGlimpseData را اضافه کرده و تنها به کاربران دارای این نقش اجازه دیدن این داده های Glimpse را می دهیم.

توضیحات را از فایل GlimpseSecurityPolicy.cs پاک کرده و IsInRole را از نقش Administrator به نقش canViewGlimpseData تغییر می دهیم :

public class GlimpseSecurityPolicy : IRuntimePolicy
{
    public RuntimePolicy Execute(IRuntimePolicyContext policyContext)
    {
        var httpContext = policyContext.GetHttpContext();
        if (!httpContext.User.IsInRole("canViewGlimpseData"))
        {
            return RuntimePolicy.Off;
        }

        return RuntimePolicy.On;
    }

    public RuntimeEvent ExecuteOn
    {
        get { return RuntimeEvent.EndRequest | RuntimeEvent.ExecuteResource; }
    }
}