مدیریت Session State در Web Service (بخش سوم)

شنبه 12 تیر 1395

در این مقاله ، می خواهیم بررسی کنیم که چگونه می توانیم ASP.NET Session state ها را در یک Web Service استفاده کنیم. برای این کار یک Web Service می سازیم و آن را در یک برنامه ی ASP.net به کار می گیریم.

  مدیریت Session State در Web Service (بخش سوم)

پیش از مطالعه این مقاله، به شما پیشنهاد می کنیم برای دریافت اطلاعات بیشتر، مقاله زیر را مطالعه کنید:

استفاده از یک Web Service در ASP.NET (بخش دوم)

برای استفاده از یک شیء ASP.NET Session در یک وب سرویس، نیاز داریم تا به دو نکته توجه کنیم. اولین نکته این است که کلاس Web Service باید از کلاس System.Web.Service.WebServices ارث بری کند و همچنین اگر ما کلاس پدر را حذف کنیم، نمی توانیم از شیء Session استفاده کنیم.

نکته دوم این است که نیاز داریم تا EnableSession property را برابر با true قرار بدهیم.

در وب سرویس، متدی به نام AddName() وجود دارد که در این مقاله برای انجام عملیات از آن استفاده خواهیم کرد. در داخل متد AddName()، ابتدا یک متغیر از نوع list (لیستی از String ) تعریف کنید و نام آن را result بگذارید. ما از شیء Session در داخل این متد استفاده می کنیم. سپس از یک متغیر Session استفاده می کنیم و نام آن را RESULT می گذاریم.

First Name (ایمان) + Second Name (مدائنی) = ایمان مدائنی

بیایید کدی که می خواهیم از آن استفاده کنیم را بررسی کنیم.

تکه کد زیر خروجی بالا را برای ما نمایش می دهد.

    string strResult=FirstName.ToString() + " + " +SecondName.ToString() +   
                    " = " + (FirstName+SecondName).ToString();  

حالا ما نیاز داریم تا نتیجه را در درون متغیر Session ذخیره کنیم.

    Session["RESULT"]=result;  
public string AddName(string FirstName, string SecondName) {  
    List < string > result;  
  
    if (Session["RESULT"] == null) {  
        result = new List < string > ();  
    } else {  
        result = (List < string > ) Session["RESULT"];  
    }  
  
    string strResult = FirstName.ToString() + " + " + SecondName.ToString() +  
        " = " + (FirstName + SecondName).ToString();  
  
    result.Add(strResult);  
  
    Session["RESULT"] = result;  
  
    return FirstName + SecondName;  
}

حالا ما به یک متد دیگر احتیاج داریم که نتایج تمامی فعالیت های کاربر را نمایش بدهد. اگر Session مربوط به result ، خالی (null) باشد، می فهمیم که کاربر هیچ فعالیت و یا تغییری ایجاد نکرده است. از سوی دیگر، اگر Session مربوط به result ، خالی (null) نباشد، به این معنی است که کاربر می تواند تغییراتی انجام بدهد و ما این تغییرات را در متغیر Session ذخیره می کنیم.

    [WebMethod(EnableSession = true)]  
    public List < string > GetResult() {  
        if (Session["RESULT"] == null) {  
            List < string > result = new List < string > ();  
      
            result.Add("Hey!!!!! you are unable to perform any action");  
      
            return result;  
        } else {  
            return (List < string > ) Session["RESULT"];  
        }  
}

برای بررسی نحوه کار پروژه، بر روی MyWebService.asmx کلیک راست کنید و آن را در مرورگر ببینید.

همان طور که در تصویر زیر می بینید، سه متد داریم. ما در این مقاله با متد  AddName کار خواهیم کرد.

بر روی نام متد کلیک کنید. برای بررسی وب سرویس، دو پارامتر وارد کنید و سپس بر روی Invoke  کلیک کنید.

همان طور که در تصویر زیر می بینید ما خروجی مورد نظرمان را در قالب یک رشته از وب سرویس دریافت می کنیم.

یک بار دیگر و با دو پارامتر دیگر ، متد AddName را تست می کنیم.

خروجی به صورت زیر خواهد بود:

 

برای نمایش تمامی نتایجی که تا حالا انجام دادیم، بر روی متد GetResult() کلیک کنید.

 

این متد هیچ پارامتری را به عنوان ورودی قبول نمی کند. بنابراین برای نمایش نتایج عملیات هایی که انجام داده ایم، بر روی Invoke  کلیک کنید.

 

در تصویر زیر می توانید ببینید که این متد، تمامی نتایج را برای ما نمایش می دهد.

حالا یک کنترل GridView به درون صفحه ی MyWebForm.aspx بیاورید.

در تصویر زیر ما نیاز داریم تا متد GetResult() را استفاده کنیم.

مشکل واقعی زمانی رخ می دهد که ما به سراغ فایل Reference.cs که شامل کلاس proxy است ، برویم. اگر دقت کنید، ما در این کلاس ، فقط دو متد AddName() و Sub() داریم و متدی به نام GetResult() وجود ندارد. این مورد به این دلیل است که ما این کلاس proxy را  قبلا ایجاد کرده ایم. بنابراین نیاز داریم تا کمی تغییرات در این وب سرویس ایجاد کنیم و کلاس proxy را به روزرسانی کنیم.

برای این کار، نیاز دارید تا بر روی Service کلیک راست کنید و گزینه Update Service reference را انتخاب کنید. این کار در شکل زیر نشان داده است:

بعد از به روز رسانی reference ها، می بینیم که متد GetResult() به صورت خودکار ایجاد شده است.

به بخش مربوط به کدهای برنامه بروید و متد GetResult() را پیدا کنید.

cl.GetResult();

 این متد آرایه از String ها را بر می گرداند و در نهایت نیز DataBind() را فراخوانی می کند.

در این بخش، متد AddName() را فراخوانی کنید.

 

حالا همه ی امور مورد نیاز را انجام داده ایم.  بر روی MyWebForm.aspx کلیک راست کنید وگزینه ی View in the Browser را انتخاب کنید.

دو مقدار در جای خالی وارد کنید و سپس بر روی دکمه کلیک کنید تا خروجی را ببینید.اگر مجددا بر روی دکمه کلیک کنید خواهید دید که پیغام زیر را به شما نشان میدهد.

"شما مجاز به انجام این عملیات نیستید!"

اگر از برنامه اجرا بگیرید، خروجی ای مانند شکل زیر خواهید دید. به این ترتیب می توانید ببینید که وب سرویس به درستی کار می کند.

 

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید