同一セッションの振る舞い

今まで知らなかったんですが、ASP.NETは同一セッションかどうかを判断して、リクエストを直列化するようです。つまり、同一セッションで複数同時にリクエストを投げると、最初のリクエストの処理が終わるまで待たされるという具合です。

これは、セッション管理はInProcとStateServerがありますが、どちらを使っても矛盾しないように設計されているためだと思います。SateServerを使うとセッション情報を永続化するためにシリアライズ/デシリアライズが必要になります。このシリアライズをどのタイミングで行なうか?がポイントなんでしょうかね。セッション情報が変わる度にシリアライズしていたらパフォーマンス的に破綻しそうですから、リクエスト単位(リクエストの最初と最後?)でシリアライズ/デシリアライズするのが現実的と判断してんでしょう。

で、リクエスト単位のシリアライズとなると、リクエストの途中で、同一セッションの情報が他のリクエストから変更されるとセッション情報の不整合が発生してしまいます。なので、同一セッションのリクエストは直列化されて処理するという方針によって、このセッション情報の不整合問題を回避しているということなのでしょう。

一言でいうと「同一セッションにおいては、リクエストセーフ」だということ。ASP.NETって賢いですね。