向 ISS/SSAS 发出 XMLA/DAX 请求

Posted

技术标签:

【中文标题】向 ISS/SSAS 发出 XMLA/DAX 请求【英文标题】:Making XMLA/DAX requests to ISS/SSAS 【发布时间】:2020-08-27 12:49:59 【问题描述】:

我在SSAS 2019有一个表格数据库,其中数据源是SQL Server 2019。我需要通过XMLA检索数据,所以我按照these instructions将IIS连接到SSAS。

当我使用 POST 方法(HTTP 调用)通过 ISS 向 SSAS 发送 SOAP 请求时,我收到以下错误。响应是 SOAP 消息这一事实让我认为问题出在 SSAS,而不是 ISS。

如果我从 SSMS(没有 SOAP)运行 XMLA,它可以正常工作,因此可能是 SOAP 信封的问题。

我试图用谷歌搜索错误,但找不到任何东西。如何使这项工作?这是什么解析错误?

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
    <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">
        <Command>
            <Statement>
                Evaluate DimProduct
            </Statement>
        </Command>
        <Properties>
            <PropertyList>
                <Catalog>TabularProject4</Catalog>
            </PropertyList>
        </Properties>
    </Execute>
 </soap:Body>
</soap:Envelope>

错误响应:

 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
     <soap:Body>
        <soap:Fault xmlns="http://schemas.xmlsoap.org/soap/envelope/">
             <faultcode>XMLAnalysisError.0xc1270004</faultcode>
             <faultstring>Errors during parsing DIME headers. An unexpected value was 
 encountered in the TYPE field of a chunk record for a DIME message.</faultstring>
             <detail>
                 <Error ErrorCode="3240558596" Description="Errors during parsing DIME 
headers. An unexpected value was encountered in the TYPE field of a chunk record for 
a DIME message." Source="Unknown" HelpFile=""/>
             </detail>
         </soap:Fault>
     </soap:Body>
 </soap:Envelope>

更新

看SSAS specification中的2.1.1节,DIME代表二进制数据记录,不知道SSAS为什么要读取二进制数据。

例如,如果我发送 &lt;A&gt;xxx&lt;/A&gt; 而不是发送整个 SOAP XML,我会收到相同的错误,因为它仍在尝试解析 DIME 格式。

【问题讨论】:

您如何连接到 msmdpump XMLA 端点?使用带有连接字符串的 ADOMD.NET 或类似驱动程序?还是直接通过低级 HTTPS 调用? 这是一个 HTTP 调用 网址是http://localhost/OLAP/msmdpump.dll 你能分享进行 HTTP 调用的代码吗? 谢谢,这就是我正在做的事情(这对我来说更容易,因为我没有 .NET 方面的经验)。我正在 Visual Studio 中创建一个 ASP.NET REST API,它将使用 ADOMD.NET 访问 SSAS。 Java 应用程序将调用 REST API。 【参考方案1】:

我找不到解决这个问题的方法,所以我最终在 IIS 中托管的 C# 中创建了一个 REST API 服务。 C# 程序访问 Analysis Services 数据库,执行 DAX 语句,并返回带有数据的 JSON。 Java 程序获取调用 API 的数据。此解决方案还有一个额外的好处,因为 XMLA 过于冗长且 JSON 消息更短。即使处理大量数据,这也能正常工作。

【讨论】:

以上是关于向 ISS/SSAS 发出 XMLA/DAX 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何从flutter应用程序向本地主机发出http get请求?

如何从 docker 容器向 localhost 发出请求?

使用 axios 向 SOAP 端点发出请求

无法向本地服务器发出 HTTPS 请求

角度不会向节点js rest API发出发布请求

使用现有凭据向 youtube 数据 api 发出请求