类型:其他系统尺寸:174.5M语言:中文评分:1.6 tab:立即下载症状。
IIS网站(IIS7)部署在公司的数据库服务器上,使用Sql Server Analysis Services的msmdpump.dll组件通过HTTP层访问分析服务(MSAS不支持HTTP远程访问,非HTTP远程访问从未成功)。状况良好,最近罢工了。调试发现在建立连接时总是抛出“连接超时或丢失”。
诊断
尝试将分析服务与企业管理器直接连接成功,数据访问正常,表明分析服务运行正常。那么问题似乎出在IIS身上。
当您通过浏览器中的http://机器名称/OLAP/MSMDPump.dll直接访问文件时,会弹出一个保存文件的对话框。正常情况下,服务器会返回500,因为没有数据输入。现在弹出保存文件的对话框,显示IIS把这个dll资源当作普通文件,而不是调用ISAPI处理器来处理。
仔细看网站的配置,似乎没有问题。重新部署了一个网站,重新配置了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)。该选项的功能是允许在64位操作系统的32位应用程序池中加载32位程序。
之所以会突然出现这个问题,是因为IIS的机器配置文件ApplicationHost.config文件中全局应用池的enable32bitAppOnWin64的默认值意外更改为True。我部署的IIS网站将继承ApplicationHost.config文件中的默认值,因为此选项未显式设置。