Опубликован: 29.07.2008 | Доступ: свободный | Студентов: 1266 / 145 | Оценка: 4.49 / 4.15 | Длительность: 17:53:00
Лекция 5:

Чтение данных SQL Server через интернет

Установление соединения через конечные точки HTTP

В SQL Server 2005 появилась возможность использовать протокол HTTP в качестве протокола передачи данных через конечные точки HTTP. Вот основные преимущества использования конечных точек HTTP:

  • Внешние клиентские приложения могут устанавливать соединения с SQL Server через интернет при помощи протокола передачи данных HTTP независимо от их физического размещения.
  • Клиентские приложения, написанные на таких языках программирования или для таких платформ выполнения, которые не поддерживают ни одного из поставщиков доступа к данным SQL Server, тем не менее, могут выполнять запросы к SQL Server через доступ по HTTP.
  • Нет необходимости добавлять в конфигурацию межсетевого экрана дополнительные открытые порты. Передача данных ведется через 80 порт, как и все прочие коммуникации HTTP.
Устанавливаем соединение с SQL Server по протоколу HTTP
  1. Создайте хранимые процедуры или пользовательские функции, чтобы инкапсулировать выполняемые публично операции.
  2. Создайте и сконфигурируйте конечную точку HTTP.
  3. Создайте ссылку на конечную точку HTTP из клиентского приложения.

    Эти действия детализируются в следующих разделах данной лекции.

    Дополнительная информация Возможности HTTP в SQL Server зависят от API HTTP (HTTP.sys), предоставляемого операционной системой, на которой выполняется сервер. В настоящее время только Windows XP SP2 и Windows Server 2003 предоставляют поддержку для HTTP.sys.
Создаем хранимые процедуры или пользовательские функции, чтобы инкапсулировать выполняемые публично операции

Конечные точки HTTP в SQL Server 2005 обеспечивают способ описания сервис-ориентированного интерфейса для операций баз данных. Выражение "сервис-ориентированный" означает, что клиентское приложение не устанавливает соединение и не выполняет напрямую определенные хранимые процедуры или пользовательские функции; вместо этого конечная точка HTTP представляет эти хранимые процедуры и пользовательские функции как службы (Веб-службы с поддержкой XML) через предварительно заданный формат, который называется форматом WSDL (Web Services Description Language, язык описания веб-служб).

Для обмена XML-сообщениями и клиент, и сервер должны соблюдать этот формат.

В примере, рассматриваемом в этой лекции, мы создадим новую хранимую процедуру, которая возвращает список названий заказов.

Создаем хранимую процедуру
  1. В меню Start (Пуск) выберите All Programs,. Microsoft SQL Server 2005, SQL Server Management Studio (Все программы, Microsoft SQL Server 2005, Среда SQL Server Management Studio).
  2. В диалоговом окне Connect To Server (Соединение с сервером) укажите действующие учетные данные проверки подлинности и нажмите кнопку Connect (Соединить), чтобы выполнить вход в систему SQL Server.
  3. Если окно нового запроса не было открыто раньше, нажмите кнопку New Query (Новый запрос), чтобы открыть окно нового запроса. В этом окне введите следующий текст, который можно найти в файле httpEndpoints.sql.
    USE AdventureWorks
    GO
    CREATE PROCEDURE GET_HEADER_LIST
    AS
      SELECT * FROM Sales.SalesOrderHeader 
    GO
  4. Нажмите функциональную клавишу F5 или кнопку Execute (Выполнить), чтобы выполнить этот сценарий T-SQL. Протестируйте сделанную к этому моменту работу, выполнив следующую инструкцию для выполнения хранимой процедуры:
    EXEC GET_HEADER_LIST
Создаем и настраиваем конечную точку HTTP

После создания всех хранимых процедур и пользовательских функций, которые будут предоставляться через конечную точку HTTP, следует создать и сконфигурировать саму конечную точку.

Чтобы настроить конфигурацию конечной точки HTTP,. администратор базы данных использует новую инструкцию языка описания данных (DDL), CREATE ENDPOINT.

Создаем конечную точку HTTP
  1. Откройте окно нового запроса в SQL Server Management Studio.
  2. Введите следующий код T-SQL (его можно взять из файла примеров httpEndpoints.sql. URL tempuri.org представляет пространство имен XML. Можно использовать любую строку, если она является уникальной для организации или компьютера).
    Примечание. Если Internet Information Server (IIS) выполняется на том же компьютере, что и SQL Server, следует остановить службу IIS перед выполнением следующего кода. В противном случае вы получите сообщение об ошибке, информирующее вас о том, что указанный порт может быть занят другим процессом.
    USE MASTER 
    GO
    
    EXEC sp_reserve_http_namespace N'http://localhost:80/sql/myservices' 
    GO
    CREATE ENDPOINT [MyServices] 
      STATE=STARTED
    AS HTTP (
       PATH=N'/sql/myservices',
       PORTS = (CLEAR),
       AUTHENTICATION = (INTEGRATED) 
      ) 
      FOR SOAP (
        WEBMETHOD "http://tempuri.org/".'SalesHeadersList' ( 
          NAME=N'[AdventureWorks].[dbo].[GET_HEADER_LIST]', FORMAT=ROWSETS_ONLY)
  3. Нажмите функциональную клавишу F5 или кнопку Execute (Выполнить), чтобы выполнить этот сценарий T-SQL.

Данный код создает конечную точку HTTP для представления хранимой процедуры GET_HEADER_LIST в качестве службы, доступной для клиентов через протоколы HTTP и SOAP (Simple Object Access Protocol, простой протокол доступа к объектам).

Примечание. Чтобы избежать путаницы между несколькими конечными точками HTTP, каждое приложение должно зарезервировать свое пространство имен и зарегистрировать его в HTTP.sys. Это можно сделать неявно, создав новую конечную точку, либо явно, при помощи хранимой процедуры sp_reserve_http_namespace. См. дополнительную информацию в Электронной документации SQL Server 2005, тема "Резервирование пространства имен HTTP".

Конечной точке HTTP, которая была определена выше, был присвоен идентификатор MyServices ; она готова начать получение запросов сразу после выполнения приведенного выше кода, так как этот код устанавливает свойство STATE в состояние STARTED. Другие возможные значения свойства STATE – это STOPPED и DISABLED.

Код также задает для свойства AUTHENTICATION значение INTEGRATED. Это означает, что SQL Server будет пытаться проверить подлинность вызывающего приложения по учетным данным Windows с использованием протокола NTLM или Kerberos.

Примечание. Если при попытке выполнения этого примера вы получите ошибку HTTP 403- Forbidden Access (Нет доступа), то это означает, что SQL Server не может проверить подлинность пользователя, который используется для вызова конечной точки. Это происходит независимо от используемой версии операционной системы и конфигурации механизма обеспечения безопасности пользователя. Дополнительную информацию можно найти в Электронной документации SQL Server 2005, тема "Указание проверки подлинности, отличной от Kerberos, в проектах Visual Studio".

Другие протоколы проверки подлинности, например, Обычная проверка подлинности, в процессе проверки подлинности пересылают пароль в незашифрованном виде. При использовании Обычной проверки подлинности SQL Server 2005 требует шифрования канала передачи данных и защиты через протокол SSL (Secure Sockets Layer, протокол защищенных сокетов). Для параметра PORTS могут быть заданы значения CLEAR или SSL. CLEAR показывает, что канал передачи данных не использует SSL.

Параметр PATH показывает относительный путь, который будет использоваться для идентификации конечной точки во внешней сети. Полный путь, который будет указывать клиентское приложение, следующий: http://server_name/sql/myservices. Для нашего примера можно направить Internet Explorer по ссылке http://localhost/sql/myservices?wsdl, чтобы проверить созданное сообщение XML.

Важно. При создании конечной точки только члены роли sysadmin и владельцы конечной точки могут устанавливать с ней соединение. Другим пользователям необходимо предоставить разрешение на доступ к конечной точке. Это осуществляется посредством выполнения следующей инструкции: GRANT CONNECT ON HTTP ENDPOINT::[Имя_КонечнойТочки] TO [Домен\Учетная запись пользователя].

После настройки конфигурации самой конечной точки, второй фрагмент инструкции CREATE ENDPOINT DDL настраивает хранимые процедуры и пользовательские функции, которые будут представлены в качестве службы.

Администраторы базы данных могут объявить столько методов WEBMETHOD, сколько нужно. Каждый веб-метод (WEB-METHOD) настраивает конфигурацию одной службы, которая сопоставлена одной хранимой процедуре или одной пользовательской функции.

Представленная служба в этом случае идентифицируется по псевдониму "http://tempuri.org/".'SalesHeader-sList'. Этот веб-метод сопоставлен хранимой процедуре, указанной в параметре NAME.

Параметр FORMAT настраивает тип информации, возвращаемой SQL Server. ROWSETS_ONLY показывает, что следует возвращать только результаты. Потом клиентское приложение может воспользоваться объектом ADO.NET DataSet, чтобы получить эти данные.

Параметр WSDL определяет, что формат WSDL может быть сгенерирован автоматически сервером SQL Server.

Примечание. При создании конечной точки HTTP следует задать много важных параметров конфигурации. См. дополнительную информацию в Электронной документации SQL Server 2005 тему "Инструкция CREATE ENDPOINT (Transact-SQL)".
Создаем ссылку на конечную точку HTTP из клиентского приложения

Клиентские приложения, осуществляющие обмен данными через конечную точку HTTP, могут пересылать только такие запросы, которые соответствуют формату WSDL. Формат WSDL динамически создается сервером SQL Server путем объединения метаданных всех предоставляемых веб-методов (WEBMETHOD) и форматирования их по действующему формату WSDL.

Клиентские приложения, разработанные при помощи среды разработки Microsoft Visual Studio 2005, могут легко создавать веб-ссылки на конечные точки HTTP.

Чтобы создать веб-ссылку на конечную точку HTTP SQL Server, выполните следующие действия (этот проект можно найти в файлах примеров в папке ConsumeHTTPEndpoint ).