2015-10-18 3 views
0

Я создаю приложение, сильно смоделированное от учебника here. Это, по сути, приложение интернет-магазина, где, когда пользователь приходит на сайт, он присваивает уникальный идентификатор строки, который приложение использует для хранения того, что пользователь выбрал в базе данных. Строка идентифицирует корзину покупок пользователей.HttpContext Null Ошибка

У меня есть клиентский JavaScript с использованием D3.js, которому необходимо отправить некоторую информацию на сервер. Я добавил веб-службу (.asmx), которая хорошо работает для получения данных, но после ее получения сервер отправляется на поиск информации пользователя в базе данных, но не может повторно генерировать уникальный идентификатор.

В учебнике дана функция, которая возвращает строку Id и работает хорошо, прежде чем функция asmx вызывается JavaScript. Я не могу понять, почему я получаю эту ошибку только после запуска веб-службы.

Функция, которая получает Id

public string GetVirusId() 
    { 
     //Line where I get the error 
     if (HttpContext.Current.Session[DescriptionSessionKey] == null) 
     { 
      if (!string.IsNullOrWhiteSpace(HttpContext.Current.User.Identity.Name)) 
      { 
       HttpContext.Current.Session[DescriptionSessionKey] = HttpContext.Current.User.Identity.Name; 
      } 
      else 
      { 
       // Generate a new random GUID using System.Guid class.  
       Guid tempDescriptionId = Guid.NewGuid(); 
       HttpContext.Current.Session[DescriptionSessionKey] = tempDescriptionId.ToString(); 
      } 
     } 
     return HttpContext.Current.Session[DescriptionSessionKey].ToString(); 
    } 

Ошибки я получаю:

Message: "Object reference not set to an instance of an object." 

Мой ASMX веб-сервис файл

namespace Trojan 
{ 
    /// <summary> 
    /// Summary description for updateGraph 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService] 
    public class updateGraph : System.Web.Services.WebService 
    { 

     [WebMethod] 
     public bool analyseGraph(int x) 
     { 
      bool B = true; 
      using (VirusDescription virus = new VirusDescription()) 
      { 
       B = virus.updateGraph(x); 
      } 
      return B; 
     } 
    } 
} 
+1

Если вы изучаете ASP.NET, это, вероятно, хорошая идея, чтобы узнать Web API вместо ASMX, поскольку они больше не поддерживаются Microsoft. Кроме того, когда вы получаете сообщение об ошибке, вы должны указать, какая строка вызывает его. И если это исключение NullReferenceException, вы должны указать, какой объект имеет значение null. В вашем заголовке звучит так, как HttpContext имеет значение null. – mason

ответ

0

Я понял это. По-видимому, поддержка сеанса отключена по умолчанию для веб-методов. Вы можете прочитать больше об этом here.

Я изменил свой метод веб-сервиса ниже, и теперь он работает хорошо:

namespace Trojan 
{ 
    /// <summary> 
    /// Summary description for updateGraph 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService] 
    public class updateGraph : System.Web.Services.WebService 
    { 

     [WebMethod(EnableSession = true)] 
     public bool analyseGraph(int x) 
     { 
      bool B = true; 
      using (VirusDescription virus = new VirusDescription()) 
      { 
       B = virus.updateGraph(x); 
      } 
      return B; 
     } 
    } 
}