Msmdpump.dll OLAP数据泵抛出500错误

时间:2016-03-25 16:54:52

标签: sql-server iis ssas olap isapi

如何通过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

  • 应用程序池配置为.NET CLR v4.0,具有经典管理管道模式。身份设置为本地服务帐户。 (我还尝试过域帐户,我尝试让本地用户成为管理员)。
  • 我根据MSDN文章在默认网站下创建了一个名为OLAP的应用程序,其中包含一个IsapiModule。

IIS setup for OLAP data pump

据我所知(并且我已经进行了双重和三重检查),所有内容都按照MSDN文章中的规定配置。此外,与我具有此设置的另一台服务器(在不同的网络上)相比,它基本上是相同的。

当我在该计算机上的浏览器中请求http://localhost/OLAP/msmdpump.dll时,我收到500内部服务器错误。该错误表明它正在尝试使用我创建的OLAP处理程序。 这与我在向msmdpump.dll发出GET请求时通常会遇到的错误不同。直接GET的正常错误,当一切正常时,被发送回SOAP信封。就我而言,msmdpump.dll似乎没有处理该请求。

通过浏览器

500内部服务器错误:

(见下面的完整截图)

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连接

500内部服务器错误:

尝试通过SQL Server Management Studio连接到数据泵时,我也收到错误:

SSMS OLAP connection 500 error

浏览器中500错误的屏幕截图:

IIS OLAP data pump IsapiModule 500 error

我设置的机器和数据泵已经运行的服务器之间的一个明显区别是,新服务器上还有一些角色设置。

问题服务器包括:

  • .NET Extensibility 4.5
  • ASP.NET 4.5

而另一台机器(数据泵工作的地方)不包括这些角色。 ASP.NET 4.5或.NET Extensibility 4.5的存在是否会导致IIS为此IsapiModule提供请求的问题?

2 个答案:

答案 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跟踪

有关完整说明,请参见:https://docs.microsoft.com/en-us/iis/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-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 FOUNDPROCESS NOT FOUND的结果。当系统尝试例如找到各种dll,因此对于相同的文件名,通常会看到一些NOT FOUND结果和SUCCESS结果。您正在寻找没有没有任何相应的NOT FOUND结果的SUCCESS结果。

就我而言,这突出显示了两个dll:

  • msvcr120.dll
  • msvcp120.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\System32C:\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 ++可再发行组件 安装更新后的程序。