仔细看了一下网站的配置,好像没什么问题。重新部署了网站并重新配置了ISAPI处理器映射,但问题仍然出现。
我已经探索了很长时间,但我已经谷歌了很长时间。一篇文章(IIS 7——在不同的工作进程上同时运行32位和64位ASP.NET版本)提醒了我。本文讲述了如何在不同的应用程序池进程中使用32位和64位Asp.Net。
为了性能,公司使用了64位系统。对应的msmdpump.dll文件也是64位,但是我真的没有考虑过IIS的应用池进程是多少位。任务管理器一看,只有一个‘w3wp.exe * 32’,果然是32位。该问题的原因应该是32位应用程序池无法加载64位Isapi处理器。
知道了问题,解决方法很简单,启动一个64位的应用程序池就可以了。打开应用程序池的高级设置,找到“启用32位应用程序(enable32bitAppOnWin64)”的设置,将其由True改为False(默认值为False)。此选项的功能是允许将32位程序加载到64位操作系统上的32位应用程序池中。
突然出现这个问题的原因是IIS的机器配置文件ApplicationHost.config文件中全局应用程序池的enable32bitAppOnWin64的默认值被意外修改为True。但是,我部署的IIS网站将继承ApplicationHost.config文件中的默认值,因为没有显式设置该选项。