memocon プログラミングのメモや物欲日記、雑記等

.NET MVC 本番環境にデプロイしたら403エラーになってしまう時

2013年09月10日 19時49分

ローカルだと動くんだけど本番環境にデプロイしたら403になってかなり悩んだ時のメモ。

結論からいうとここの情報で解決。

stack overflow
403 – Forbidden: Access is denied. ASP.Net MVC [duplicate]

http://stackoverflow.com/questions/2805311/403-forbidden-access-is-denied-asp-net-mvc

Web.configに下記の要素を追加したら動いた。

runAllManagedModulesForAllRequestsについてはこの辺りか。

IIS 7.0 のモジュールの概要

http://technet.microsoft.com/ja-jp/library/ee890776.aspx

ショートカットを使用して、”managedHandler” の必須条件に関係なく、アプリケーションにおけるすべての要求について、すべてのマネージ (ASP.NET) モジュールを実行できるようにすることもできます。 各モジュール エントリで “managedHandler” の前提条件を削除せずに、すべての要求についてすべてのマネージ モジュールを実行できるようにするには、 セクションで runAllManagedModulesForAllRequests プロパティを使用します。

このプロパティを使用する場合、”managedHandler” の必須条件は無効になり、すべての要求についてすべてのマネージ モジュールが実行されます。

はまっている人が多いのか色々情報があるけどそれぞれ解決時の手順が違うっぽいのでいろいろやってみるのが吉かと。
IISに.NET Frameworkを認識させたりするパターンとかアプリケーションプールのモードの問題とか…

MSDNフォーラム
ASP.NET MVC3 HTTP 403 アクセス不可 になってしまいます

http://social.msdn.microsoft.com/Forums/vstudio/ja-JP/2a1eb45a-dea2-4e35-82de-5210c3085ad0/aspnet-mvc3-http-403-

しかし2年ぶりに.NET触ってみると浦島太郎状態…

デスクトップヒープが足らずにコントロール作成エラー

2011年08月22日 11時40分

納品しているプログラムが先方環境だと定期的に落ちるという報告があったので調査したところWindow Handleの作成に失敗するというエラーログが出力されていた。

Win APIを直接触るわけでもなくWindow Handleなんて.NETで意識したことなかったが調査したところデスクトップヒープ領域が足らずに落ちていることが判明。

Visual Studioで直接デバッグできないので以下のツールを使用してデバッグ。

デスクトップヒープ モニターツール ダウンロードページ
http://www.microsoft.com/downloads/en/confirmation.aspx?familyid=5CFC9B74-97AA-4510-B4B9-B2DC98C8ED8B&displaylang=en

どうもPanelにButtonをAddする度に大量に減っていく。
そしてPanel.Clear()しても開放されずに消費したままなのが原因。

Clearして参照がなくなる前にコントロールをDisposeすることで現象が解消した。

GCの開放タイミングの問題だが既にリリースしてPGをあまり変えられない場合は
Disposeを明示的に呼ぶことで解消する場合がある。

デスクトップヒープ モニターツール 参考ページ
http://www.atmarkit.co.jp/fwin2k/win2ktips/071desktopheap/desktopheap.html
http://support.microsoft.com/kb/914216
http://www.rcs-solutions.com/blog/2007/12/05/TheDesktopHeap.aspx
http://space.geocities.jp/nequomame/dotnet/winservice/winservice_04.html