Значения сеанса потеряны в приложении ASP.NET - PullRequest
2 голосов
/ 10 марта 2011

Я создал класс 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-файлах или что-то еще для определения следующего запроса, но на самом деле я понятия не имею.

Любая помощь действительно приветствуется.

1 Ответ

1 голос
/ 14 марта 2011

В случае, если кто-то сталкивается с этой проблемой, я хотел бы указать, что это произошло, потому что я использую некоторые манипуляции с файлами в методе 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 («путь»); из метода все просто работало нормально. Тем не менее я не могу понять, с какой стати код манипулирования файлами сбрасывает значения сеанса.

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

...