Введення в SQL Server Analysis Services для розробника. Доступ по SOAP., Інші СУБД, Бази даних, статті

Можна не користуватися SSMS, Як це робилося в постах MDX і XMLA або XMLA DDL, а написати своє власне кастомних додаток по відправці SOAP-Запитів. Способів для цього безодня. Щоб не втрачати ліс за деревами, я не буду користуватися SoapHttpClientProtocol, А просто по робітничо-селянському зашлю на OLAP-Сервер XMLA-Запит (див. Скрипт 1 з поста MDX і XMLA), який фактично являє собою готовий SOAP. Щоб OLAP-Сервер брав запити по HTTP, Потрібно IIS, На якому потрібно створити віртуальну директорію і сказати, що все, що туди валиться, обробляє відповідний ISAPI-Фільтр. Ми розбирали цей процес в пості Доступ по HTTP. Зараз скористаємося отриманими результатами. Створимо HTTP POST-Запит до http://192.168.0.29/msolap/msmdpump.dll (Це той самий ISAPI). У запит покладемо рядок xmla, Яка в точності дорівнює SOAP-Замовлення з скриптів 1 із згаданого поста. Отримаємо відгук HttpWebResponse. Перетворимо стрім з відгуку в рядок і побачимо, що це в точності той XML, Який ми бачили в SSMS в панелі результатів.

using System;

using System.Net;

using System.Text;

using System.IO;

using System.Diagnostics;

class Program

{

    static void Main(string[] args)

    {

        string xmla = @”<soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/”>

                          <soap:Body>

                            <Execute xmlns=”urn:schemas-microsoft-com:xml-analysis”>

                              <Command>

                                <Statement>SELECT Measures.MEMBERS ON COLUMNS FROM [Adventure Works]</Statement>

                              </Command>

                              <Properties>

                                <PropertyList>

                                  <DataSourceInfo/>

                                  <Catalog>Adventure Works DW 2008R2</Catalog>

                                  <Format>Multidimensional</Format>

                                  <AxisFormat>TupleFormat</AxisFormat>

                                </PropertyList>

                              </Properties>

                            </Execute>

                          </soap:Body>

                        </soap:Envelope>”;

        HttpWebRequest req = WebRequest.Create(“http://192.168.0.29/msolap/msmdpump.dll”) as HttpWebRequest;

        req.Credentials = new NetworkCredential(“192.168.0.29Administrator”, “PoDolinam01”);

        req.Method = “POST”;

        byte[] reqBytes = Encoding.ASCII.GetBytes(xmla);

        Stream stream = req.GetRequestStream();

        stream.Write(reqBytes, 0, reqBytes.Length);

        stream.Close();

        HttpWebResponse rsp = req.GetResponse() as HttpWebResponse;

        byte[] rspBuffer = new byte[8192]; int count = 0; string strBuffer; StringBuilder res = new StringBuilder();

        stream = rsp.GetResponseStream();

        while (true)

        {

            count = stream.Read(rspBuffer, 0, rspBuffer.Length); / / Читання відразу до stream.Length не прокатує, т.к. для цього стрім повинен підтримувати Seek, А він, зараза, не хоче. Доводиться читати відповідь по шматках.

            if (count == 0) break;

            strBuffer = Encoding.ASCII.GetString(rspBuffer, 0, count);

            res.Append(strBuffer);

        }

        Debug.WriteLine(res.ToString());

    }

}

Скрипт 1

Рис.1

Далі пишеться парсер, який витягує з результату опису осей, будує відповідний cellset, витягає дані і набиває осередку cellset “a. Ми зараз цим займатися не будемо.

Аналогічно, не будемо розглядати, як заслати SOAP-запит у випадку, коли все знаходиться в межах локальної сітки. Створювати віртуальну директорію в цьому випадку не потрібно і замість ISAPI можна адресуватися безпосередньо на ім’я OLAP-сервера. Техніка SOAP з використанням TcpClient розбирається тут. Таким чином, незалежно від транспорту є можливість відправити повноцінний XMLA у вигляді SOAP-запиту на OLAP-сервер і отримати результат за схемою MDX і XMLAРис.4. Даний спосіб дає найбільш повний контроль, тому що, як уже неодноразово говорилося, XMLA є рідною мовою спілкування з MS AS, однак він пов’язаний з накладними витратами для розробника: спочатку доводиться складати SOAP-конверт, потім парсити XML, повернений в якості результату, витягуючи з нього корисне навантаження.

Існують засоби доступу, що беруть на себе накладні витрати, але, як і в будь програмної моделі, за це доводиться платити зниженням гнучкості та повноти контролю. Найбільш популярним таким засобом є ADOMD.NET – аналог ADO.NET для багатовимірних даних, який ми розглянемо далі.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*