+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 92.51 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

SQL Server Native Web Services

24.11.2011 10:39
Алексей Шуленин

И SQL Server, и Analysis Services обладают возможностью общаться с клиентом поверх HTTP. В SQL Server такая возможность появилась в версии 2000.

Она позволила засвечивать SQL Server как веб-сервис, а выбранные хранимые процедуры - как методы этого веб-сервиса. Можно было даже включить возможность выполнения произвольных SQL-запросов через HTTP GET. В SQL Server 2005 все стало еще лучше, т.к. IIS в случае установки на Windows Server 2003 стал не нужен.

В Windows Server 2003 HTTP API был реализован на уровне драйвера уровня ядра HTTP.SYS, который умел принимать HTTP-запросы от клиентов и форвардить их в зарегистрированные конечные точки (HTTP Endpoints). Соответственно, в Transact-SQL появился оператор CREATE ENDPOINT, который назначал конечной точке URL. HTTP.SYS, получив HTTP-запрос, кидал его на этот URL.

Внутри движка SQL Server был реализован стек SOAP (the native SOAP stack built into the database engine obviates the need for a middle-tier process (such as IIS) for this purpose -http://msdn.microsoft.com/en-us/library/ms345140.aspx). Таким образом, SQL Server не стал полноценным веб-сервером, т.к. не умел обслуживать произвольные HTTP-запросы, однако с тем их подмножеством, которое касается поддержки SOAP, справлялся самостоятельно без посредника. Пример создания конечной точки в SQL Server 2005-2008:
if exists(select 1 from sys.endpoints where name = 'sql_Northwind' and protocol_desc = 'HTTP')
 
drop endpoint sql_Northwind
 
go
 
CREATE ENDPOINT sql_Northwind 
 
STATE = STARTED
 
AS HTTP(
 
  PATH = '/sql/Northwind', AUTHENTICATION = (INTEGRATED), 
 
  PORTS = (CLEAR) )
 
FOR SOAP (
 
  WEBMETHOD 'CustOrderHist'
 
    (name = 'Northwind.dbo.CustOrderHist', 
 
     schema=STANDARD),
 
  WEBMETHOD 'TenMostExpensiveProducts_NoSchema'
 
    (name = 'Northwind.dbo.[Ten Most Expensive Products]', 
 
     schema=NONE),
 
WSDL = DEFAULT,
 
BATCHES = ENABLED,
 
DATABASE = 'Northwind',
 
NAMESPACE = 'http://Northwind/' )

Скрипт 1

Этот оператор определяет веб-сервис по адресу http://vistax86sql2008/sql/Northwind, который будет иметь два веб-метода, соответствующих хранимым процедурам Northwind.dbo.CustOrderHist и Northwind.dbo.[Ten Most Expensive Products]. Также, поскольку мы сказали BATCHES = ENABLED, появится третий метод для того, чтобы через него запускать произвольные SQL-запросы.

Документацию на оператор CREATE ENDPOINT можно прочитать в Books On-Line на русском (http://msdn.microsoft.com/ru-ru/library/ms181591.aspx) или на английском (http://msdn.microsoft.com/en-us/library/ms181591.aspx). По его выполнении в Object Explorerе (Server Objects -> Endpoints -> SOAP) можно посмотреть созданную конечную точку SOAP

Рис. 1

а через браузер обратиться к ней, получив определения методов веб-сервиса, висящего на этой конечной точке:

Рис. 2

Доступиться до конечной точки из браузера (кроме как получить вышеприведенный WSDL) нельзя, т.к. браузер шлет GET и POST-запросы, а мы отмечали, что SQL Server не является полноценным веб-сервером - он умеет обслуживать только SOAP-запросы.

Поэтому нам придется написать простенького клиента веб-сервиса. В Visual Studio 2008 процесс создания ссылки на веб-сервис занимает больше кликов, чем в 2005-й, потому что теперь наше все - это Windows Communication Foundation (WCF), и Service Reference означает ссылку на сервис WCF, а Web Reference - устаревший частный случай. Про WCF можно прочитать много славословий: и что он дозволяет более гибкую настройку прокси, и что байндится к любому транспорту (HTTP, TCP, Shared Memory и т.д.) В общем, WCF - это очередное единственное, что нам не хватало для наступления коммунизма, и уж теперь-то, нет сомнений, все будет в полном, извините за каламбур, Azure.

Я же, пока коммунизм у нас еще не настал окончательно, буду по старинке пользоваться Web References для того, чтобы подцепиться к созданной в Скрипте 1 конечной точке. Открываем в Visual Studio 2008 новый проект, достаточно какого-нибудь консольного приложения, кликаем правой кнопкой на References, говорим Add Service Reference, в открывшееся окно вводим адрес http://vistax86sql2008/sql/Northwind?WSDL, жмем кнопку Go.

Рис. 3

На этом не останавливаемся, жмем кнопку Advanced...

Рис. 4

Здесь ничего не делаем, просто жмем кнопку Add Web Reference...

Рис. 5

В текстбокс URL повторно вбиваем адрес веб-сервиса, который мы уже вводили на рис.3. Жмем кнопку Go. Вводим свой логин/пароль, потому что веб-сервис создавался с AUTHENTICATION = (INTEGRATED) - см. Скрипт 1. Проверяем в Description под урловой строкой, что все методы она видит правильно, при необходимости в текстбоксе Web reference name меняем, как будет именоваться веб-сервис (по умолчанию имя машины), и жмем кнопку Add Reference. В Solution Explorer появилась веб-ссылка:

Рис. 6

Пишем следующий код, вызывающий метод CustOrderHist, сопоставленный (см. Скрипт 1) хранимой процедуре Northwind.dbo.CustOrderHist:

using System.Data;
using System.Diagnostics;
using System;
 
namespace ConsoleApplication1
 
{
    class Program
    {
        static void Main(string[] args)
        {
            vistax86sql2008.sql_Northwind proxy = new vistax86sql2008.sql_Northwind();
 
            proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
 
            DataTable results = (proxy.CustOrderHist("ALFKI")[0] as DataSet).Tables[0];
 
            foreach (DataRow r in results.Rows)
 
            {
 
                Debug.WriteLine("");
 
                for (int i = 0; i < results.Columns.Count; i++) Debug.Write(String.Format("{0}; ", r[0]));
 
            }
 
        }
 
    }
 
}

Скрипт 2

Выполняем его и убеждаемся, что все работает. Можно вызвать процедуру из SSMS и сравнить результаты с теми, что мы сейчас видим в Output.

Рис. 7

Хочу еще раз подчеркнуть, что IIS в данном случае не при делах. Он вообще не установлен:

Рис. 8

Итак, мы продемонстрировали работу с SQL Server по HTTP, именно - выполнение им SOAP-запросов. Очень удобный и легкий механизм. Тем более, что CREATE ENDPOINT можно всю жизнь было делать AS HTTP и AS TCP, когда никаким WCF еще не пахло. Можно было создавать конечные точки для сервис-брокера, зеркалирования, выделенного административного соединения.

Однако при выполнении Скрипта 1 вы заметили сообщение "Creating and altering SOAP endpoints will be removed in a future version of SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use it". Короче, пока это все еще, слава Богу, пашет, но скоро лафа закончится. Естественно, я никоим образом не против наступления светлого будущего. Мне только непонятно, каким образом наличие непосредственно внутри процесса SQL Server функциональности по обработке SOAP-сообщений мешает сейчас написать веб-сервис на ASP.NET, обращающийся к SQL Server, и раскидать его по узлам веб-фермы? Наличие функциональности SQL Server Native Web Services никоим образом не препятствует создать внешний веб-сервис, работающий с SQL Server. Один инструмент для одних задач, другой для других.

 Зачем вдруг гробить один и утверждать, что это делается в угоду другому, если они друг другу не противоречат? Недоумение разделяют все, от таких грандов, как Боб Бушмен (http://www.sqlskills.com/blogs/bobb/post/HTTP-Endpoints-to-be-deprecated-in-SQL-Server-2008.aspx), и заканчивая рядовыми пользователями (http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=3807250&SiteID=17). Дабы избежать обвинений в косности и каком-либо уклоне, я просто привожу дискуссию и воздерживаюсь от комментариев:

"SQL2008 Upgrade Advisor выдал ошибку, что конечные точки, которые мы используем для наших веб-сайтов, будут убраны из следующей версии, и я должен их переделать с использованием Windows Communication Foundation. Однако я нигде не могу найти никаких статей, объясняющих, как промигрировать существующие конечные точки на WCF... Где мне начать смотреть документацию, чтобы решить этот вопрос?"

"Может быть, я не понимаю твой вопрос, но тем не менее. Идея в том, что сейчас твое клиентское приложение напрямую вызывает методы, написанные на SQL и расположенные на SQL Server. Что нужно сделать - это чтобы клиент обращался к тем же методам на веб-сервере, а не на SQL Server. Методы будут делать по сути то же, что и сейчас, - единственно, они просто будут написаны на ASP.Net вместо SQL. Эти методы на веб-сервере будут коннектиться к твоему SQL Server, чтобы получить результаты и переправить их на клиента, работая как промежуточное звено..."

"Tres;

Может, я тупой, может, это врожденно, но я реально не понимаю, зачем создавать лишнее звено в виде промежуточного ASP.Net web service, который будет обращаться к SPs & UDFs на SQL server, если мой веб-сайт уже напрямую к ним обращается?"

"На самом деле, я считаю, вы задали очень хороший вопрос. По сути "если не сломалось, то и зачем ремонтировать", правильно? Хорошо, я приведу некоторые соображения, почему Microsoft убирает Native Web Services и затем вы сможете оценить для себя, насколько вам подходит переходить.

1. Начиная с SQL Server 2008 Native Web Services будут отменены. Это означает, что Microsoft переходит в режим сопровождения для Native Web Services. В следующей версии прекратится поддержка, и инноваций в этой области больше не будет.

2. Это позволит Microsoft лучше выровняться с существующими технологиями.

3. SQL Server 2005 Native Web Services предоставили пользователям простой механизм выставления наружу существующих Stored Procedures (SP) и User Defined Functions (UDF) в качестве веб-методов. Поскольку эта функциональность заложена непосредственно внутри процесса SQL Server, Native Web Services не могут располагаться на типовой "веб-ферме", чтобы как-то решить вопрос с высокой стоимостью обработки парсинга текста XML. Задействуя промежуточный слой, такой, как IIS и ASP.Net, можно распределить эту стоимость среди группы веб-серверов, чтобы уменьшить нагрузку по обработке XML на SQL Serverе..."

"Ликвидация такой замечательной и полезной функциональности - по моему мнению, исключительно вредный шаг.

Я могу понять желание что-то улучшить, чтобы повысить масштабируемость, тем более, что простор для этого имеется. Но улучшать вещи путем убирания замечательной функциональности, великолепно приспособленной для простых и эффективных реализаций, - это не дело.

Наша компания использует Native XML web services в SQL Server для систем, предоставляющих легковесный и низкозатратный способ реализации веб-сервисов, которые позволяют кросс-платформенным приложениям обращаться к SQL server через единые интерфейсы.

Я бы сильно рекомендовал оставить эту функциональность как немаловажную причину, стимулирующую приобретение SQL Server..."

Ссылки по теме

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года