SOAP - как использовать ExecuteSQL?

Как через веб-сервисы выполнять SQL_запросы на базе данных?

В WDSL есть метод ExecuteSQL, он принимает параметр APackage
Нигде в документации ничего про это не нашел. Не нашел так же никаких примеров кода.

Как выполнить SQL-запрос к данным базы через веб-сервисы?

Нравится

7 комментариев

Тут многое зависит от версии системы.
В своем блоге я показал пример вызова сервисов под 3.3.0.
APackage это не сам запрос, а вся команда к SQL серверу с параметрами, сохраненная определенным образом сначала в xml, потом в Base64(Mime) и, в зависимости от параметров соединения, возможно зазипованая.
Плюс возможна пакетная передача данных, если запросы большие.

Прикрепляю пример работы с последней версией Web-сервисов Terrasoft на C#

хм.... на 3.3.0 и 3.3.2 не работает:

	string LoginInfoXml = Enc.GetString(Convert.FromBase64String(LoginInfoStr));
	XmlDocument XmlDoc = new XmlDocument();
	XmlDoc.LoadXml(LoginInfoXml);
	XmlNode node = XmlDoc.FirstChild;

неправильно раскодирует. Надо будет попробовать на более поздних версиях...

Нет, Саня, на 3.3.2.119 не работает.
Возвращает респонз, который начинается всегда для всех запросов с символов "eAEB".
Это какие-то управляющие спецсимволы, если их перевести в нормальную кодировку.
На ранних версиях у меня этого нет. Т.к. это не стандартная кодировка - пример, что выложен тоже не работает.
Convert.FromBase64String(LoginInfoStr) - не правильно разкодирует то что пришло с сервера.
Кстати, под 4-м фреймворком вообще вебсервисы не работают, только под 2-м.

Возможно, эта задача и не приоритетная - решать вам. Я просто констатирую факты.

Спасибо, Андрей. Постараюсь предоставить более актуальный пример. Также выясню насчет Framework 4.0

Сегодня добрался до тестирования проблемы с выполнением ExecuteSQL через веб-сервисы.

Так вот, выяснил, что управляющие символы в начале -- это начало архива (сжатие результатов в zip-архив). Поэтому Convert.FromBase64String возвращал не то что хотелось, т.к. нужно делать "разархивацию".

Для упрощения работы с веб-сервисами, я добавил возможность возвращать результаты без дополнительного сжатия. В моем примере из предыдущего комментария это задается в строке номер 72:

rqOpenConfiguration.ACompressionLevel = 0; //Without compression (zip)     

Эта доработка появилась начиная с версии 3.3.2.123.

И насчет версии Framework'а. На 4-том все замечательно работает, так же как и на 2-ом. В качестве теста использовал:

  • Windows 7 Enterprise х64
  • IIS 7.5
Показать все комментарии