Странное поведение переменной сеанса в веб-методе

#c# #asp.net #webmethod

#c# #asp.net #webmethod

Вопрос:

Пожалуйста, прочитайте мой вопрос, это не связано с тем, как получить доступ к webmethod или как использовать session. ‘

Я столкнулся с одной проблемой и не понял ее.

У меня есть один класс sessioninfo, который содержит в нем всю информацию, связанную с сеансом. Когда я использую его в Page_load(), он работает нормально. но когда я попытаюсь получить к нему доступ в webmethod, он выдает мне ошибку, подобную этой: «sessionInfo.Ошибка идентификатора пользователя CS0103: имя ‘sessionInfo’ не существует в текущем контексте»

вот мой класс code sessionInfo

 namespace Abc.Common
{
      public class SessionInfo
      {
          public static decimal UserID
          {
             get
             {
                 try
                 {
                    if (HttpContext.Current.Session["UserID"] != null)
                       return Convert.ToDecimal(HttpContext.Current.Session["UserID"]);
                    return 0;
                 }
                 catch (Exception)
                 {
                    return 0;
                 }
             }
             set
             {
                 HttpContext.Current.Session["UserID"] = value;
             }
         }
         ...
         ...
      }
  }
  

// внутренний код asp.net (.aspx.cs)

 using Abc.common;
....
  

Код в Page_Load

 protected void Page_Load(object sender, EventArgs e)
{
    if (SessionInfo.UserID == 0)    //here its working fine
    {
        Response.Redirect(Page.ResolveUrl("~/Default.aspx?errormsg=Your Session Is Expired."));
    }
    if (!IsPostBack)
    {
        ...
    }
}
  

Код веб-метода

 [System.Web.Services.WebMethod]
public static DataTable ValidateUploadedFiles()
{
     //if (Abc.Common.SessionInfo.UserID == 0)    //its working fine
     if (SessionInfo.UserID == 0)
     {
         ...
     }
}
  

когда я напрямую использовал переменную sessioninfo, она выдавала ошибку (уже пространство имен включено в инструкцию using)

 SessionInfo.UserID  //this want work.
  

когда я буду использовать его с пространством имен с классом, он работает нормально.

 Abc.Common.SessionInfo.UserID  //this is working fine.
  

Ответ №1:

Из вашего описания я предполагаю, что вам не хватает инструкции «using» в верхней части вашего файла. Просто добавьте «using Abc.Common;» в первой строке вашего файла, и он должен работать нормально. Ох. И это не имеет никакого отношения к тому, что это веб-метод. Именно так работают пространства имен.

Комментарии:

1. Я упомянул, что я использовал оператор using. но это странная проблема.