2

ASP.NET で HttpHandler クラスを作成し、*.test パスですべての要求を処理するように Web サイトを構成しました。

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 
    }

Setup メソッドには、次のようなコードがあります。

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情報などを送り返す必要があると思いますが、実際にはわかりません。

どんな助けでも本当に感謝しています。

4

1 に答える 1

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"); を削除したら メソッドから、すべてがうまくいきました。それにもかかわらず、ファイル操作コードがセッション値をリセットする理由がわかりません。

ハッピーコーディング。

于 2011-03-14T13:07:39.560 に答える