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 機能はサイトのこの特定のセクションでは使用されていません。
アイデアやコメントは大歓迎です!
ありがとう。