如何通过msmdpump.dll
与SQL Server Analysis Services连接的请求解决此问题?我收到IsapiModule的500错误。
在使用IIS 8.5的Windows Server 2012 R2计算机上,我使用以下说明设置了OLAP数据泵(msmdpump.dll
):https://msdn.microsoft.com/en-us/library/gg492140.aspx#bkmk_copy
据我所知(并且我已经进行了双重和三重检查),所有内容都按照MSDN文章中的规定配置。此外,与我具有此设置的另一台服务器(在不同的网络上)相比,它基本上是相同的。
当我在该计算机上的浏览器中请求http://localhost/OLAP/msmdpump.dll
时,我收到500内部服务器错误。该错误表明它正在尝试使用我创建的OLAP
处理程序。 这与我在向msmdpump.dll发出GET
请求时通常会遇到的错误不同。直接GET
的正常错误,当一切正常时,被发送回SOAP信封。就我而言,msmdpump.dll
似乎没有处理该请求。
(见下面的完整截图)
Module IsapiModule
Notification ExecuteRequestHandler
Handler OLAP
Error Code 0x8007007e
Requested URL http://localhost:80/OLAP/msmdpump.dll
Physical Path C:\inetpub\wwwroot\OLAP\msmdpump.dll
Logon Method Anonymous
Logon User Anonymous
通过SSMS连接尝试通过SQL Server Management Studio连接到数据泵时,我也收到错误:
我设置的机器和数据泵已经运行的服务器之间的一个明显区别是,新服务器上还有一些角色设置。
问题服务器包括:
而另一台机器(数据泵工作的地方)不包括这些角色。 ASP.NET 4.5或.NET Extensibility 4.5的存在是否会导致IIS为此IsapiModule提供请求的问题?
答案 0 :(得分:0)
您可能应该在IIS上禁用匿名身份验证
答案 1 :(得分:0)
就我而言,安装KB3138367(https://support.microsoft.com/en-us/help/3138367/update-for-visual-c-2013-and-visual-c-redistributable-package)解决了该问题。
有一些有用的调试步骤。
配置IIS跟踪
但是,您可以忽略告诉您删除现有内容的部分-它们将在此处有些多余,以确保您在本教程中获得相同的结果。只需将失败的请求跟踪添加到您的现有站点,捕获“ 500”状态代码。
就我而言,这导致了结果:
ModuleName IsapiModule
Notification EXECUTE_REQUEST_HANDLER
HttpStatus 500
HttpReason Internal Server Error
HttpSubStatus 0
ErrorCode The specified module could not be found. (0x8007007e)
我确认我的处理程序映射具有通往msmdpump.dll的正确路径,但仍然收到错误。现在该进行下一个调试步骤了:
使用Sysinternal Process Monitor检查w3wp.exe 进程监视器是Microsoft提供的免费工具:https://docs.microsoft.com/en-us/sysinternals/downloads/procmon
使用进程监视器记录文件系统访问(对“ w3wp.exe”进程进行过滤,以免被淹没)
寻找NAME NOT FOUND
和PROCESS NOT FOUND
的结果。当系统尝试例如找到各种dll,因此对于相同的文件名,通常会看到一些NOT FOUND
结果和SUCCESS
结果。您正在寻找没有没有任何相应的NOT FOUND
结果的SUCCESS
结果。
就我而言,这突出显示了两个dll:
这些事实证明是“ Microsoft Visual C ++ 2013可再发行”程序包(https://superuser.com/questions/1163409/msvcp120-dll-and-msvcr120-dll-are-missing)的一部分。
但是,“添加/删除程序”显示该软件包已经安装。在软件包上运行“修复”不能解决问题。
找到dll
就我而言,OLAP泵安装在与Analysis Services分开的Web服务器上。
运行以下powershell命令:
Get-ChildItem -Path 'C:\' -Recurse -File -Filter 'msvcr120.dll' -ErrorAction SilentlyContinue | select -ExpandProperty DirectoryName
Get-ChildItem -Path 'C:\' -Recurse -File -Filter 'msvcp120.dll' -ErrorAction SilentlyContinue | select -ExpandProperty DirectoryName
产生了一些有趣的结果。在网络服务器上,dll仅显示在C:\Windows\SysWOW64
中。
但是,在安装了Analysis Services的服务器上,dll同时存在于C:\Windows\System32
和C:\Windows\SysWOW64
中(以及其他一些sql服务器路径)
(顺便说一句,SysWOW64包含32位dll,而System32可能包含64位dll。因此,简单地从SysWOW64复制到System32可能会引起问题。请参阅https://www.howtogeek.com/326509/whats-the-difference-between-the-system32-and-syswow64-folders-in-windows)
我从Web服务器上的Process Monitor日志中看到,搜索路径之一是C:\Windows\System32
。稍加搜索就导致了KB3138367(Installing both Visual Studio 2013 Redistributable packages (x86 & x64) at the same time)
实际的KB文本(https://support.microsoft.com/en-us/help/3138367/update-for-visual-c-2013-and-visual-c-redistributable-package)描述了该问题:
在安装更新的可再发行程序包时,用于 非目标体系结构被删除。例如,安装后 基于x86的应用程序x64 Visual C ++ 2013的更新 运行时库丢失。此修复程序确保两个版本 添加或删除时可见的Visual C ++可再发行组件 安装更新后的程序。