0

MVC / TempData / Session / おそらく IIS6 タイプの問題に本当に苦労しています。

シンプルな MVC Web サイトがあります。プライマリ コントローラーは次のようになります。

public class DemoController : Controller
{
    [HttpPost]
    public RedirectToRouteResult Index(SomeObject obj)
    {
        _someService.DoStuffWith(obj);

        TempData.Add("SomeObject", obj);

        return RedirectToAction("Index");
    }

    [HttpGet]
    public ViewResult Index()
    {
        var obj = TempData.Peek("SomeObject") as SomeObject;

        return View("Hello", obj);
    }
}

つまり、これは非常にシンプルな Post Redirect Get です - どこかからデータを送信し、Post-friendly アクションで取得し、それを処理し、一時データに挿入し、Get-friendly にリダイレクトし、再度取得し、ユーザーを固定しますモデル内のオブジェクトを含む新しいビューで。これはこれまでに数十回実装されており、問題はありませんでしたが、常に IIS7 にありました。

これは、cassini とローカル IIS 7.5 の両方で、ローカルで実行している場合に期待どおりに機能します。ただし、Server 2003 および IIS6 に展開するとすぐに、ビュー内の「SomeObject」モデルのプロパティに初めてアクセスしようとすると、null 参照例外が発生します。

それで、他に何を試しましたか:

  • TempData を捨てて、それを Session["Whatever"] にプッシュしました - 同じ結果が得られました
  • 私は HttpContext.Current.Session["Whatever"] にプッシュしました - 同じ結果で
  • ControllerContext.HttpContext.Session["Whatever"] にプッシュしました-同じ結果で

(確かに、私はこれらの違いについて大ざっぱです-今まで心配する必要はありませんでした)

  • IIS でセッション状態がオンになっていることを確認しました。
  • Asp.net セッション識別子が要求間で変化していないことを確認しました。
  • 2003年とIIS6を実行している2つの別々のサーバーに展開しましたが、両方で同じ結果になりました
  • 明示的に使用される SessionStateBehaviour.Required

私ができないこと:

  • ローカル マシン外の IIS7 に展開する
  • SqlServer SessionState を使用する
  • StateServer SessionState を使用する

また、このサイトは MVC4 RC を使用していることにも言及する価値がありますが、RC 機能はサイトのこの特定のセクションでは使用されていません。

アイデアやコメントは大歓迎です!

ありがとう。

4

2 に答える 2

1

これは私のシステムの問題でした-アンダースコアを含むサーバー名がありました。RFC 952ではホスト名にアンダースコアを使用することは許可されておらず、Cookieを設定してセッションを永続化する機能を妨げる可能性があります。

これを追跡するために、各コントローラーセクションでSessionIDを監視し始め、投稿ごとに変更されていることに気付きました。これは、テストサーバーでのみ発生していました。これは、テストサーバーであることを示すために_tで名前を付けたためです。痛い!

この点を見つけました。

それは他の価値を提供するかもしれません。

これがお役に立てば幸いです

デビッド

于 2012-08-16T18:47:22.610 に答える
0

私にとっての問題は、web.config ファイルでこれを設定していたのに、SSL を使用していなかったことです。

<httpCookies requireSSL="true" />

この設定により、ASP.NET セッション Cookie を含む、安全でない (つまり、非 SSL) 接続で Cookie が動作するのを防ぎます。

于 2015-06-26T10:23:33.523 に答える