私はいくつかのDLLをロードするMVC4アプリケーションを持っています。基本的に、MVCアプリケーションのアーキテクチャーは、アプリケーションがユーザーからいくつかのジョブを受け取り、dllから処理関数を呼び出し、最終的にユーザーに結果を電子メールで送信します。IIS8を使用したMVCアプリケーションのヒープ破損
すべてのDLLは64ビットでコンパイルされていますが、Windows Server 2012 R2とVS2013ではIIS8を64ビットで使用しています。 私は/アプリケーションをデプロイし、実行すると、その動作は次のとおりです。
Scenario1
:VS2013でのVisual Studio 2013から実行、デバッグ/リリースモード=>は、細かいScenario2
の作品で、Webサーバー(IISエクスプレス)が含ま:ファイル名を指定して実行リリースモードでローカルフルIIS8に配備されたVisual Studio 2013 =>正常に動作しますScenario3
:開放モードでローカルモードのIIS8で展開され、開いたままでVS2013 => IISがクラッシュしますAn unhandled win32 exception occurred in w3wp.exe.The Just-ln-Time debugger was launched without necessary security permissions. To debug this process, the Just-ln-Time debugger must be run as an Administrator.
デバッガを開くとエラーはA heap has been corrupted
です。イベントビューアで
、ログは以下のとおりです。
Faulting application name: w3wp.exe, version: 8.5.9600.16384, time stamp: 0x5215df96
Faulting module name: ntdll.dll, version: 6.3.9600.18821, time stamp: 0x59ba86db
Exception code: 0xc0000374
私は例外コード0xc0000374はHeap corruption
から来ていることを知っています。
私はDebugDiagとApplication Verifierを使用してFull PageHeapフラグを有効にしてIISをデバッグしました。クラッシュのスレッドのスタックの 関連する部分は次のとおりです。
.NET Call Stack
mscorlib_ni!DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr)+68
[[InlinedCallFrame] (Microsoft.Win32.Win32Native.LocalFree)] Microsoft.Win32.Win32Native.LocalFree(IntPtr)
mscorlib_ni!System.Runtime.InteropServices.Marshal.FreeHGlobal(IntPtr)+2d
Species_DLL.Class1.Species_MetaModel()+b955
rIAMTestMVC4.Impressions.SpeciesUtil.use_Species_Integrated(Int32)+1efd
Full Call Stack
vrfcore!VerifierStopMessageEx+6f4
vrfcore!VfCoreRedirectedStopMessage+90
verifier!VerifierStopMessage+a0
verifier!AVrfpDphReportCorruptedBlock+2a7
verifier!AVrfpDphCheckNormalHeapBlock+c8
verifier!AVrfpDphNormalHeapFree+27
verifier!AVrfDebugPageHeapFree+af
ntdll!RtlDebugFreeHeap+47
ntdll!RtlpFreeHeap+74c85
ntdll!RtlFreeHeap+368
vrfcore!VfCoreRtlFreeHeap+1e
KERNELBASE!LocalFree+2e
mscorlib_ni!DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr)+68
[[InlinedCallFrame] (Microsoft.Win32.Win32Native.LocalFree)] Microsoft.Win32.Win32Native.LocalFree(IntPtr)
mscorlib_ni!System.Runtime.InteropServices.Marshal.FreeHGlobal(IntPtr)+2d
Species_DLL.Class1.Species_MetaModel()+b955
rIAMTestMVC4.Impressions.SpeciesUtil.use_Species_Integrated(Int32)+1efd
はScenario2とScenario3の間に違いはありますか? VSによって行われるヒーププロテクションはありますか?
私はIIS7でWindows7でも同じシナリオを実行し、3つすべてでうまく動作します。
私はDLLコードにアクセスできないが、前述したように、IIS7/Windows7とVisual StudioのIIS8では完全に同じコードが実行されます。
LE:コールスタックに示した二つの機能がある:
rIAMTestMVC4.Impressions.SpeciesUtil.use_Species_Integrated
=>この関数は、1つのDLLを呼び出しMVCコントローラからのものであるがSpecies_DLL.Class1.Species_MetaModel
=>この関数は、以前によって呼び出され、DLLからです関数。
シナリオ3の問題をどのように解決できますか?これらのシナリオの違いは何ですか?
は、私は同様の問題があったが、私は32ビットを補うためにはx86するために、プロジェクトのビルドを変更することで鉱山を解決し、
ありがとうございます。すべてのDLLが64ビットであるため、これは私の解決策ではありません。 – banuj