在64位操作系统上的32位应用程序池中运行我的网站

时间:2010-04-11 23:15:42

标签: c# asp.net web 32bit-64bit

这是我的设置:

开发:   - Windows Server 2008 64位   - Visual Studio 2008   - 具有3个类库,1个Web应用程序的解决方案

暂存Web服务器:   - Windows Server 2008 R2 64位   - 启用了32位应用程序的IIS7.5集成应用程序池

在Visual Studio中,我已将所有4个项目都设置为“任何CPU”,但是当我在具有32位应用程序池的Web服务器上运行此Web应用程序时,它会超时并崩溃。当我以64位模式运行应用程序池时,它工作正常。生产Web服务器要求我在64位操作系统中运行32位应用程序池,这就是我在登台Web服务器上以这种方式配置它的原因。

(我考虑在ServerFault上发布,但服务器部分似乎工作正常。这是我的代码,特别是似乎不想在32位应用程序池中运行,这就是我在这里发布的原因。)

编辑:事件视图错误

Faulting application name: w3wp.exe, version: 7.5.7600.16385, time stamp: 0x4a5bcd2b
Faulting module name: KERNELBASE.dll, version: 6.1.7600.16385, time stamp: 0x4a5bdbdf
Exception code: 0xe053534f
Fault offset: 0x0000b727
Faulting process id: 0x%9
Faulting application start time: 0x%10
Faulting application path: %11
Faulting module path: %12
Report Id: %13

8 个答案:

答案 0 :(得分:4)

可悲的是,我认为这里有人没有办法解决这个问题。我使用的两个DLL来自下载的ZIP文件,当我转到这些文件的属性时,有一个盒子说他们已经从互联网上下载,我不得不“解锁”它们。似乎64位应用程序池没有尊重这一点,但是当我降到32位时它确实如此。一旦我“解锁”了DLL,一切都开始正常工作。

答案 1 :(得分:2)

我在我正在处理的应用程序上遇到了类似的错误...如果我将程序集构建到目标x86,它运行正常。当我定位“任何CPU”时,我只遇到了问题。

答案 2 :(得分:1)

我想64位可以运行64位和32位代码,但32位只能运行32位代码。

如果要在32位启用的框中运行由64位编译器编译的代码,则需要使用32位编译器编译代码。

答案 3 :(得分:1)

对于每个项目,请尝试以下操作:

1)在项目上单击鼠标右键,然后选择“属性”。

2)选择左侧的Build选项卡

3)选择x86作为平台目标

4)重建

答案 4 :(得分:1)

我认为错误表示尝试将64位dll加载到32位进程中。您的项目可能都设置为“任何CPU”(或x86),但我愿意打赌你引用的是64位dll。您使用的是包含64位dll的任何第三方库吗?

通过修改.csproj文件并使用一些msbuild脚本,可以根据当前计算机的环境即时交换32位/ 64位引用。如果您对如何做到这一点感兴趣,请告诉我,我会发布一个后续行动。

答案 5 :(得分:1)

你的帖子有点令人困惑。

任何CPU - X64都有效吗?

任何CPU - X64 + 32bitCompat都不起作用?

如果是这种情况,听起来他们正在使用的库之间存在差异。也许运行时解释为x64但是正在使用x86库。它们匹配很重要。

您应该为x64和x86(或仅x86)创建新配置,并根据需要进行部署。根据我的经验,使用“任何CPU”可以引导这条糟糕而丑陋的道路。

答案 6 :(得分:1)

在我的情况下,问题是由客户端bin文件夹中的第三方dll的错误版本引起的。

我的计算机上安装了10.3和11.1版的Infragistics。我的项目有11.1版本的参考,但在我的客户端的bin文件夹中,只有Infragistics 10.3存在。

因为我的计算机上安装了这两个版本,所以在构建应用程序时没有任何错误。原因是我可以确定Infragistics的好版本在哪里;在GAC中。但是对于没有安装Infragistics的客户,我收到与本帖子问题相同的错误。

答案 7 :(得分:0)

相同(通用)异常代码,但对我来说,如果我尝试使用域管理员用户帐户(在2k8R2上的IIS 7上的32位.net 2应用程序)进行身份验证,则会出现问题。如果我创建了本地用户并将其添加到Builtin \ Administrators组,然后使用该帐户登录,则应用程序正常运行。即使域管理员用户自动成为内置\管理员的成员。希望这种思路而不是依赖域管理员帐户可以帮助其他人。