Msmdpump DISCOVER_DATASOURCES request - XMLAnalysisError.0xc1270004 error

Test 21 Reputation points
2022-03-28T07:47:20.877+00:00

We are trying to access OLAP through an msmdpump.dll endpoint hosted in IIS, on the same server as the SSAS we are connecting to through a POST HttpRequest. I'm testing it through POSTMAN as follows:

POST https://ourserver/olap_test/msmdpump.dll

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" flexmonster="true"
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" >
        <SOAP-ENV:Body>
            <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
                <RequestType>DISCOVER_DATASOURCES</RequestType>
                <Restrictions/>
                <Properties/>
            </Discover>
        </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Or via javascript through Firefox Dev tools:

    var xhr = new XMLHttpRequest();
    xhr.open("POST", 'https://servername/OLAP_test/msmdpump.dll', true);
    xhr.withCredentials = true;

    xhr.send('<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" flexmonster="true"><SOAP-ENV:Body><Discover xmlns="urn:schemas-microsoft-com:xml-analysis"><RequestType>DISCOVER_DATASOURCES</RequestType><Restrictions/><Properties/></Discover></SOAP-ENV:Body></SOAP-ENV:Envelope>');

Though it doesn't matter what the content of the request is. The same result happens with just <SOAP-ENV:Envelope/> alone.

The following error is returned:

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

Additionally there's an Event Viewer error at the same time:

The description for Event ID 25 from source MSOLAP ISAPI Extension: \\?\c:\inetpub\wwwroot\olap_test\msmdpump.dll cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.

I can access the Cube through Excel just fine.

What does this error mean? How come it's not working through a POST request? Thank you.

SQL Server Analysis Services
SQL Server Analysis Services
A Microsoft online analytical data engine used in decision support and business analytics, providing the analytical data for business reports and client applications such as Power BI, Excel, Reporting Services reports, and other data visualization tools.
1,209 questions
0 comments No comments
{count} votes

Accepted answer
  1. Darren Gosbell 1,466 Reputation points
    2022-04-04T03:08:04.883+00:00

    So msmdpump is not a generic REST endpoint. You cannot just post a DISCOVER request without first establishing a session. But it goes beyond this, by default the server expects requests to be encrypted and the responses that are sent back are both encrypted and compressed. Client tools like Excel and SSMS use the Microsoft client libraries to handle this encryption and compression. If you are posting raw messages to msmdpump you would also need to do this, but I'm not sure if all the details required are documented, I believe the compression algorithm might be a proprietary one.

    If you really need a generic REST API you will have to build this yourself. The way to do this would be to use the ADOMDClient library from Microsoft (available on Nuget) to connect internally to SSAS, then execute the requests and return the results.

    1 person found this answer helpful.

1 additional answer

Sort by: Most helpful
  1. ZoeHui-MSFT 27,466 Reputation points
    2022-03-28T09:00:33.657+00:00

    Hi @Test ,

    Sorry that I am not familiar with POSTMAN, thus may not help you with POSTMAN. But since you are accessing OLAP through an msmdpump.dll endpoint hosted in IIS, I would suggest you to use SSMS to connect to you SSAS via msmdpump.dll endpoint.

    187390-0328.png

    Then you may run your command to see if it can success in SSMS.

    <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">  
    <RequestType>DISCOVER_DATASOURCES</RequestType>  
    <Restrictions/>  
    <Properties/>  
    </Discover>  
    

    Regards,

    Zoe


    If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".

    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.