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