M的SQL server 我这里用SS代替,Sql Server Analysis Service 我用SSAS代替,
这是OPENI文档中也这么称呼,希望大家习惯。
介绍我的环境:
windows xp pro + sp2
SS 2000 开发版(中文) + sp3a
SSAS 2000 +sp3a
XML analysis SDK 6.0
XMLA SDK 1.1
sorry我的迅雷历史察看有问题,列不出地址了。大家自己找吧。
安装方法可以参看openi首页的安装文档,上面详细介绍了如何安装
注意,这里SSAS 2000 和SS用的是sp3a的补丁,openi官方称jpivot
不支持SSAS 2000+sp4 或SS 2005,需要修改文件。修改方法看openi
的wiki,(我没试过)。
为什么,要用SSAS 2000呢?因为SSAS 2005明确说,要使用XMLA
SOAP必须要windows 2003,配IIS 6.0,我的机器是xp,也不想装2003所以
必须选SSAS2000,关于IIS6.0我起先想装到xp上,下了n多的所谓的6.0 for XP
全是假的,还中了n个木马。记住IIS6.0只有在2003上,xp上是没有的,
openi中文档里说的applaction pool在2003中才有,同样web services也必须
2003上配。SSAS 2000为什么选sp3a这是openi说的,俺就不试sp4了,省的有问题
先安装以上我列举的软件。
然后在IIS,管理面板中选择,默认站点,新建虚拟目录,目录名为xmla指向
C:/Program Files/Microsoft XML For Analysis SDK/isapi
设置可匿名访问该虚拟目录,并在属性中设置,执行权限是脚本和可执行文件。
设完后在浏览器中输入:
http://localhost/xmla/msxisapi.dll
应该看到如下显示:
<?xml version="1.0" ?>
- <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
- <SOAP-ENV:Body>
- <SOAP-ENV:Fault xmlns:XA="urn:schemas-microsoft-com:xml-analysis">
<faultcode>XA:XMLAnalysisError.88BA0800</faultcode>
<faultstring>Web 服务只支持 POST 操作。</faultstring>
<faultactor>urn:schemas-microsoft-com:xml-analysis</faultactor>
- <detail>
<Error ErrorCode="2293893120" Description="Web 服务只支持 POST 操作。" Source="urn:schemas-microsoft-com:xml-analysis" />
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
意思是说,xmla不支持get,必须post操作
到这里,任务完成了多半
在你的配置里,修改xmla的配置让他指向,这里就ok了
例如morndian 中修改WEB-INF/question/xmla.jsp中
<jp:xmlaQuery id="query01"
uri="http://localhost/xmla/msxisapi.dll"
catalog="FoodMart 2000">
注意catalog是FoodMart 2000
然后到界面中,预览就OK了。
这里有几个问题,玩了我3天,我先列举一些
SQL server 2005 soap必须在2003上配
IIS 6.0不能装在XP上
SQL server 的sp补丁必须跟服务器语言版本一致,openi的是E文的不能用
不要用xmlaTest.jsp测试(我测试xmla都用这个,结果就是这个玩了我两天)
xmlaTest.jsp发送的报文是Form的一个简单Post,如果直接把URL,换为msxisapi.dll
就会报
<faultcode>XA:XMLAnalysisError.8007000E</faultcode>
<faultstring>处理请求时出错。</faultstring>
Goole半天终于知道要在http请求头中加入:
SOAPAction: "urn:schemas-microsoft-com:Discover"
对这句话解释是:XML/A servers didn't require it, but by the "letter of the law" it should be in there.
form post的时候当然没这个东东了。
而jpivot中发送的时候带,看报文:
POST /xmla/msxisapi.dll HTTP/1.1^M
SOAPAction: "urn:schemas-microsoft-com:xml-analysis:Discover"^M
Content-Type: text/xml; charset="utf-8"^M
Content-Length: 429^M
Cache-Control: no-cache^M
Pragma: no-cache^M
User-Agent: Java/1.5.0.03^M
Host: 192.168.0.203:9444^M
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2^M
Connection: keep-alive^M
注意到了没,有个SOAPAction,而testXMLA.jsp是Form提交当然没有,
看报文头如下:
POST /xmla/msxisapi.dll HTTP/1.1^M
User-Agent: Opera/9.01 (Windows NT 5.1; U; zh-cn)^M
Host: 192.168.0.203:9444^M
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1^M
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8^M
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1^M
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0^M
Referer: http://192.168.0.203:8444/mon/xmlaTest.jsp^M
Connection: Keep-Alive^M
Content-Length: 1134^M
Content-Type: application/x-www-form-urlencoded
所以MS的SSAS,XMLA要报那个该死的错误。你要不明白原理,调死你也不通。
为了这个试了N种组合,包括XMLA SDK版本降级。。。
引用原文:jpivot联MS的XMLA