引言
今天碰到這樣一個需求: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=資料庫名;";
以上不足之處還請提出。謝謝!