引言
今天碰到这样一个需求:Analysis Services 与IIS不在同一台机器上,但是在同一个局域网内。
问题引出
我像以往远程访问数据库那样,打开了Sqlserver的远程服务...... 结果访问失败,老是报错:
Microsoft.AnalysisServices.AdomdClient.AdomdConnectionException: The connection either timed out or was lost. ---> System.IO.IOException: Unable to read data from the transport connection: 远程主机强迫关闭了一个现有的连接。. ---> System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。
......
解决方案
参考了一下http://technet.microsoft.com/zh-cn/library/gg492140.aspx#bkmk_copy,找出了一个解决方案。
下面只讲解决方案步骤,理论请参考http://technet.microsoft.com/zh-cn/library/gg492140.aspx#bkmk_copy
1、拓扑图(客户端、WebService、Analysis Services都分布在不同机器上)
客户端通过Webservice访问数据库获取数据。客户端在机器一上,Webservice部署在机器二上,AnalysisServices在机器三上。
机器二中的IIS用来部署Webservice,机器三中IIS用来部署虚拟目录,该虚拟目录指向MSMDPUMP.dll(这是一种在 Internet Information Services (IIS) 下运行的 ISAPI 扩展插件,它可以在客户端应用程序和 Analysis Services 服务器之间抽送数据).
2、将MSMDPUMP.dll复制到Web服务器上的某个文件夹(机器三中操作)
在 IIS服务器上,创建以下文件夹:<驱动器>:\inetpub\wwwroot\olap
-
将 Analysis Services 计算机上 ISAPI 文件夹的内容复制到您刚创建的 \inetpub\wwwroot\olap 文件夹中。
该 ISAPI 文件夹位于 <驱动器>:\Program Files\Microsoft SQL Server\<instance>\OLAP\bin\isapi。它包含以下文件和文件夹:MSMDPUMP.DLL、MSMDPUMP.INI 以及包含语言资源文件的 Resources 文件夹。
-
确认您的 Web 服务器上的 \inetpub\wwwroot\olap\isapi 文件夹包含以下内容:MSMDPUMP.DLL、MSMDPUMP.INI 和 Resources 文件夹。
3、在IIS中创建应用程序池和建立虚拟目录,和添加扩展插件(机器三中操作)
参见上面所提的网址,将身份验证设成“匿名身份验证”
4、编辑MSMDPUMP.INI文件以便设置目标服务器(机器三中操作)
参见上面所提的网址,SeverName设置成localhost即可,因为上面的拓扑图将虚拟目录与Analysis Services服务器部署在同一台机器上。
5、配置AnalysisService(机器三中操作)
为数据库添加角色Role:数据库权限设置为完全控制,成员身份中为角色指定用户和组:Iuser.
通过以上步骤,即可通过IIS访问远程的Analysis Services.
6、在IIS上部署WebService(机器二中操作)
参见上面所提的网址,将身份验证设成“匿名身份验证”
7、如何访问
1、如果使用Microsoft Sql Sever ManageMent,那么服务器名称为http://机器三名或IP/olap/msmdpump.dll
2、如果在Webservice中连接,ConnectString="Data Source=http://机器三名或IP/olap/msmdpump.dll;Catalog=数据库名;";
以上不足之处还请提出。谢谢!