Значения сеанса потеряны в приложении ASP.NET

Я создал класс HttpHandler в ASP.NET и настроил веб-сайт для обработки любого запроса с путем *.test.

public class GameHandler : IHttpHandler, IRequiresSessionState
{
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

    public void ProcessRequest (HttpContext context)
    {
        if (context.Request.ContentType == "application/json; charset=utf-8")
        {
            ...
            switch (parameters ["type"])
            {
                case "Setup":
                    result = Setup (context);

                    break;

                case "DoStep":
                    result = DoStep (context, parameters);

                    break;
             }
             ...
         }
         else
             context.Response.Write (@"
                  <html>
                      <head>
                      </head>
                      <body>
                          <!-- some HTML -->
                      </body>
                  </html>"); // this is returned on first request 
    }

В методе установки у меня есть такой код:

context.Session ["Game"] = new Game ();

Однако в методе DoStep context.Session.Count = 0, а context.Session["Game"] имеет значение NULL. На стороне клиента я использую jquery для вызова этих функций. Такой вызов выглядит следующим образом:

 $.ajax({
        url: "/test.test",  
        type: "POST",
        data: "{'type':'Setup'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {...}
 });

 $.ajax({
        url: "/test.test",  
        type: "POST",
        data: "{'type':'DoStep','row':'" + row + "','column':'" + column + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {...}
 });

Я подозреваю, что проблема в том, что ASP.NET не знает, что эти запросы, отправленные из javascript, принадлежат одному и тому же сеансу, и поэтому значения сеанса теряются. Я думаю, что мне нужно будет отправить некоторую информацию о файлах cookie или что-то еще, чтобы следующий запрос был идентифицирован, но на самом деле я понятия не имею.

Любая помощь очень ценится.


person Zoliqa    schedule 10.03.2011    source источник
comment
может быть, вы можете сравнить идентификатор сеанса с сервера и тот, который у вас есть на клиенте (куки, URL)?   -  person Menahem    schedule 10.03.2011
comment
РЕДАКТИРОВАТЬ: разве это не дубликат вопроса, который вы задали здесь?   -  person Menahem    schedule 10.03.2011
comment
Да, это та же проблема, но здесь я описал ее более подробно, и у меня пока нет хороших ответов.   -  person Zoliqa    schedule 10.03.2011


Ответы (1)


Если кто-то столкнется с этой проблемой, я хотел бы указать, что это произошло из-за того, что я использую некоторые манипуляции с файлами в методе ProcessRequest.

var doc = XDocument.Load (@"c:\XO_Game_Website\bin\test.xml"); 
if (context.Session ["something"] == null) 
{ 
    context.Session.Add("something", "something"); 
    doc.Root.Element ("xxx").Value = "null"; 
} 
else 
{
    doc.Root.Element ("xxx").Value = "not null";
}
doc.Save("path"); 

Как только я удалил doc.Save("path"); из метода все просто отлично работало. Тем не менее, я не могу понять, с какой стати код манипулирования файлами сбрасывает значения сеанса.

Удачного кодирования.

person Zoliqa    schedule 14.03.2011
comment
Если вы меняете файлы в папке bin, приложение перезагружается (вы могли положить туда новые/измененные dll, которые нужны). При перезапуске приложения все сеансы очищаются. - person Hans Kesting; 14.03.2011
comment
У меня была та же проблема, но я не писал в папку bin... Я создавал новую папку, но это также означало перезапуск приложения. Этот пост спас положение. - person GRGodoi; 12.04.2011