XML Web-службы в Microsoft SQL Server 2005 - Конечные точки
ОГЛАВЛЕНИЕ
Конечные точки
Синтаксис команды create endpoint довольно сложен, поэтому я разобью его на части, каждую из которых буду описывать отдельно. Базовый синтаксис таков:
CREATE ENDPOINT endPointName [AUTHORIZATION <login>]
STATE = { STARTED | STOPPED | DISABLED }
AS { транспорт } (
<специфичные для данного транспорта настройки>
)
FOR { протокол } (
<специфичные для данного протокола настройки>
)
- AUTHORIZATION <login> — указание имени учетной записи владельца конечной точки. Если имя не указано, владельцем считается учетная запись, под которой выполняется данная команда.
- STATE — состояние конечной точки. В состоянии started сервер будет слушать порт данной конечной точки и выполнять соответствующие команды. В состоянии stopped сервер будет слушать порт, но не будет выполнять команды, возвращая клиенту ошибку. В состоянии disabled сервер не будет выполнять прослушивание по данному порту. После отключения конечной точки ее нельзя включить без перезапуска сервера.
- AS { транспорт} — указание транспортного протокола конечной точки. На данный момент это может быть TCP или HTTP
- FOR { протокол } — указание формата протокола приложения (или подсистемы), которая будет обрабатывать команды, приходящие через конечную точку. На данный момент это может быть: SOAP — взаимодействие осуществляется по протоколу SOAP; TSQL — взаимодействие по протоколу TDS; SERVICE_BROKER — протокол подсистемы Service Broker; DATABASE_MIRRORING — протокол для зеркалирования баз данных.
Формат для протокола TSQL в текущей версии BOL не указывается, поэтому его мы рассматривать не будем, равно как и протоколы для Service Broker и DATABASE_MIRRORING. Также я не буду описывать транспорт TCP, так как он не может использоваться для протокола SOAP, поэтому ограничимся только транспортом HTTP и протоколом SOAP (кстати, у них самые сложные настройки).
Отдельно стоит подчеркнуть, хотя это должно быть видно из синтаксиса, что Web-служба может содержать один Web-метод и более либо не содержать Web-методов вообще, и при этом успешно работать (в случае, когда разрешены пакеты команд).
Естественно, что после создания конечной точки вам наверняка потребуется менять ее свойства. Как и многие другие объекты SQL Server, конечные точки поддерживают команду alter для изменения многих, но, прошу заметить, не всех своих параметров. Синтаксис этой команды не сильно отличается от команды create endpoint, поэтому его мы рассматривать не будем.
Получить список всех конечных точек можно с помощью системного представления sys.endpoints. Оно возвращает самую общую информацию обо всех конечных точках. Если вам требуется получить подробную информацию, например о Web-службах, можно воспользоваться представлением sys.http_endpoints. Соответственно, для конечных точек протокола TCP необходимо задействовать sys.TCP_endpoints. Список исключенных для использования данной конечной точкой адресов можно просмотреть в системном представлении sys.ip_exceptions.
При создании конечной точки можно столкнуться со следующими проблемами.
- Отсутствие прав на создание конечных точек. По умолчанию только пользователи в роли serveradmin или sysadmin имеют право создавать конечную точку. Для предоставления такого права какой-либо конкретной учетной записи необходимо воспользоваться командой grant connect on endpoint, о которой пойдет разговор в следующем разделе.
- Отсутствие прав у учетной записи, под которой запущен SQL Server, если вы создаете конечную точку, войдя на сервер не под учетной записью Windows. Резервирование пространства имен с помощью драйвера http.sys требует наличия административных полномочий, поэтому необходимо создавать конечную точку, войдя на SQL Server с помощью Windows-аккаунта, либо предоставить учетной записи, под которой запущен Yukon, административную привилегию. Учетная запись LocalSystem, под которой обычно работает сервер, такую привилегию имеет. Для предоставления пользователям, не имеющим административных полномочий, возможности создавать конечные точки необходимо явно (explicit) зарегистрировать пространство имен для драйвера http.sys с помощью системной хранимой процедуры sp_reserve_http_namespace. В этом случае пользователь, не имеющий административных прав (но которому позволено с помощью команды grant create endpoint создавать конечные точки), может создать конечную точку с помощью команды create endpoint, так как резервирование пространства имен уже было выполнено. Удалить зарезервированное пространство имен можно с помощью процедуры sp_delete_http_namespace_reservation. Еще один нюанс связан с тем, что при неявном резервировании пространство имен «принадлежит» SQL Server только на время его работы. Если сервер будет остановлен, тогда другие приложения смогут обрабатывать запросы к данному пространству имен, выполняя соответствующие регистрационные процедуры к http.sys.
- Если конечная точка настроена для использования по протоколу ssl, необходимо указать драйверу http.sys сертификат, который будет применяться для шифрования трафика (если быть более точным, то сам сертификат не используется для шифрования — он лишь является «носителем» открытого и закрытого ключей). Указать, какой сертификат использовать при обращении к определенному адресу, можно с помощью оснастки управления IIS, либо посредством системной хранимой процедуры sp_register_ssl_certificate_for_http, куда нужно передать ip адрес и порт, а также имя сертификата. Сертификат обязан находиться в хранилище MY локального компьютера. По умолчанию там присутствуют два сертификата с названиями: servername.domainname и servername. Просмотреть список сертификатов хранилища MY локального компьютера можно с помощью утилиты certutil: certutil —store MY. Для удаления привязки сертификата к ip-адресу и порту необходимо воспользоваться хранимой процедурой sp_delete_ssl_certificate_for_http.
В качестве «источников» для Web-методов можно использовать не только собственные хранимые процедуры или функции, но и системные. Правда, тут могут возникнуть определенные проблемы, связанные с тем, что не у всех системных хранимых процедур есть информация о метаданных, которая необходима для формирования wsdl-документа, поэтому без особых настроек с подобными процедурами работать нельзя. Варианты настроек следующие.
- Указать собственную хранимую процедуру для генерации wsdl.
- Обернуть вызов системной процедуры в специально созданную пользовательскую хранимую процедуру.
- Вызывать системную хранимую процедуру не как Web-метод, а с помощью пакетной команды.