2009年9月12日土曜日

runAllManagedModulesForAllRequests

VS2008での開発中のWebサーバーはWebDev.WebServerで、これってsystem.webServerセクションを処理しないで、IIS6と同じ動きになるじゃないっすか。

ドはまった。いきなり全然動かない状況が発生してテンヤワンヤ。そもそもIIS6にデプロイするものを作ってて、でもちょっとテストしたくなってIIS7にデプロイしたらイエロースクリーン。サッパリ原因が分からず泣きそうになった。出てきたエラーは↓これ。

セッション状態は、構成ファイルまたは Page ディレクティブで enableSessionState が true に設定されているときのみ使用できます。System.Web.SessionStateModule またはカスタムセッション状態モジュールがアプリケーション構成の <configuration>\<system.web>\<httpModules> セクションに含まれていることも確認してください。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.Web.HttpException: セッション状態は、構成ファイルまたは Page ディレクティブで enableSessionState が true に設定されているときのみ使用できます。System.Web.SessionStateModule またはカスタムセッション状態モジュールがアプリケーション構成の <configuration>\<system.web>\<httpModules> セクションに含まれていることも確認してください。

全然、解決出来そうなtipsが見つからなくて、将来の自分のためにここにコピペしとく。なんでセッションがいきなり動作しないんじゃ!と、お悩みなら、とにかくrunAllManagedModulesForAllRequests属性を確認。IIS7って統合パイプラインだったりするのが魅力なんだけど、こんなことに時間をつぶされるとは...。

    <system.webServer>
      <validation validateIntegratedModeConfiguration="false"/>
      <modules runAllManagedModulesForAllRequests="true">
        <remove name="ScriptModule" />
        <remove name="UrlRoutingModule" />

SessionStateModuleがマネージモジュールなおかげでこの属性を外すと、EnableSessionStateを設定しろと全然違うメッセージになって泣ける。

今後主流になるIIS7.5(Windows 7だけど)の場合は、英語っぽいメッセージになったけど、これまた検索で見つかるようにコピペしとこう。

The SessionStateTempDataProvider requires SessionState to be enabled.
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.InvalidOperationException: The SessionStateTempDataProvider requires SessionState to be enabled.

そもそも、この属性をいついじってしまったのかさえ覚えてない...。普通にプロジェクト作成したときには指定されてるから自分で消したのは間違いないんだけど、IIS7にデプロイするまで問題が発覚しないから、要注意。

全然関係無いけどBubbleShareにアップしてるアルバムをダウンロードしようとしても0バイトのZIPファイルになってて全然ダウンロード出来ない。早くダウンロードしないとそろそろ閉鎖しちゃう。あわあわ。