Пожалуйста, не используйте процедуры OLE автоматизации sp_OA*
. Они, похоже, официально не устарели, но SQLCLR заменяет как процедуры OLE Automation, так и расширенные хранимые процедуры.
Да, это можно сделать достаточно легко в SQLCLR. Вы можете найти примеры использования WCF (как показано в ответе @ CodeCaster) или с помощью HttpWebRequest/HttpWebResponse (у меня есть дополнительная информация в этом ответе: How to invoke webservice from SQL Server stored procedure). Кроме того, следует помнить, что иногда вам нужно будет также добавить сериализации ассамблею: Using Webservices and Xml Serialization in CLR Integration
Coding и обслуживание
Web Services обеспечить хороший API, но если изменить структуру, которую вы должны будете перекомпилировать и перераспределить в по крайней мере, часть этого. Предполагая, что обмен информацией проходит достаточно просто, я склонен думать, что рассматривать это как стандартный веб-запрос добавляет большую гибкость. Вы можете создать общую функцию веб-запроса (скаляр или TVF), которая принимает параметры и URI и создает правильно отформатированный XML-запрос и отправляет его в URI. Затем он получает ответ и просто возвращает XML. Таким образом, вы меняете немного ответственности, поскольку теперь вам нужно анализировать XML-ответ, а не получать хороший объект. Но XML легко разбирается в SQL Server, и вы можете повторно использовать эту функцию в любом количестве мест. И, если удаленная служба постоянно обновляется, обновление хранимой процедуры для изменения строки запроса, передаваемой веб-службе, и/или изменение синтаксического анализа ответа XML является простой процедурой ALTER и должно быть легко протестировано. Нет необходимости перекомпилировать/перераспределить сборку SQLCLR.
безопасности
Независимо от того, как «чистый» веб-сервиса, звоните вы хотите, главное, безопасность мудрый, должен НЕ поленитесь и включите TRUSTWORTHY ON
(как показано также в связанной странице с @ CodeCaster, и, к сожалению, большинство других примеров здесь на interwebs).Правильный способ сделать это безопасным является сделать следующее:
- Подписать ассамблею
- В базе данных
[master]
создайте асимметричный ключ из DLL вашего собрания.
- Кроме того, в
[master]
создайте Вход от Asymmetric Key
- Даруй ваш новый вход в
EXTERNAL ACCESS ASSEMBLY
разрешение
- Создать сборку с
PERMISSION_SET
из EXTERNAL_ACCESS
, неUNSAFE