2011-09-02 72 views
8

我有一个用ASP.NET编写的应用程序,它使用DllImport来引用在Delphi中编写的dll 。在我的Windows 7开发机器上使用访问ddl的asp.net Development Server按预期工作。错误的应用程序w3wp.exe

但是在Windows Server 2008的生产服务器运行IIS 7的dll返回错误“页面无法找到”和下面的错误弹出到应用程序日志:

Faulting application w3wp.exe, version 7.0.6002.18005, time stamp 0x49e023cf, faulting 
module ntdll.dll, version 6.0.6002.18005, time stamp 0x49e03821, exception code 
0xc0000374, fault offset 0x000afaf8, process id 0xab8, application start time 
0x01cc6947b1bb081b. 

如何解决这个或如何能我发现更深层次的原因?

+1

在您的开发环境中,您是否尝试在本地IIS中运行应用程序,而不是使用Development Server?请记住,开发Web服务器在您的凭据下运行,因此在IIS中运行它时,应用程序权限会有所不同。看看是否在本地运行IIS也会引发错误。 – Icarus

+0

在IIS上运行应用程序localy也会引发错误。 – Sebastiaan

+0

所以你正在取得进展...你现在已经知道它与某种权限或信任级别问题有关,因为你的本地盒子上的IIS也会引发这个问题。 – Icarus

回答

3

只是一个预感,但你可以尝试enabling 32bit worker process。它与64位更兼容,可能会有所帮助。你的本地服务器是32位吗?

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true 

如果失败,这可能有助于调试问题。

Troubleshooting IIS7 Worker Thread Crashes (w3wp.exe) with a Faulting Module of ntdll.dll

还有这里的线程与相同的问题。他们建议增加对kernel32.dll的引用可解决该问题。

Calling unmanaged code from ASP.NET in IIS7

更新

有人报告说,复制你的依赖关系Windows\System32\Inetsrv解决问题。值得一试。

+0

我启用了32位工作者procces但没有成功,我的Windows 7是64位 – Sebastiaan

+1

这是值得一试,'异常代码0xc0000374'意味着堆腐败。 – TheCodeKing

+1

只是做了一些更多的阅读,似乎很多人有问题调用IIS7中的非托管代码。 – TheCodeKing