Какая альтернатива вызовам SQL CLR? - PullRequest
0 голосов
/ 18 сентября 2018

Я использую SQL Server 2016 для своего приложения .Net [Framework 4.5].Я использую вызовы CLR в SQL для передачи некоторых данных клиентской стороне / браузеру на основе операций CRUD.

Например: SignalR Уведомления / вызовы, вызовы веб-служб с использованием сборок

Делаем ли мыиметь любую альтернативу Wrto., SQL-сервер CLR, чтобы делать прямые вызовы веб-службы.Буду признателен за любые предложения / помощь

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

У одного из наших клиентов была похожая инфраструктура для связи между двумя разными системами.

Первый подход с использованием SQLCLR внутри триггера таблицы

Триггер в таблице вызывает процедуру SQLCLR, которая создает HTTPзапрос веб-API на публикацию данных.

Обнаружено проблем : поскольку это полная область транзакции, операции CRUD, инициированные внешним интерфейсом, начали ждать, пока сообщение не получитбыл опубликован SQLCLR.

Второй подход заключался в создании процедуры SQLCLR для реализации асинхронного HTTP-запроса

Создание процедуры SQLCLR в качестве асинхронного метода с использованием пространства имен потоков.

Обнаруженные проблемы : даже этот метод вызывал проблемы и терял сообщения, когда конечная точка была недоступна.

Третий подход с использованием SQL SERVICE BROKER в качестве оболочки вокруг SQLCLR

Реализован брокер SQL-сервера для разрыва транзакций между триггером и публикацией сообщений.И сделайте HTTP-запрос от целевой хранимой процедуры активации брокера SQL.Это решило проблему, так как разрывает транзакцию после добавления в очередь.

Преимущество с использованием компонента Service Broker в качестве оболочки для SQLCLR - вы можете прервать транзакцию и сообщенияхранятся в очереди и никогда не теряются; кроме того, мы можем использовать сервисный брокер для связи между двумя различными экземплярами SQL-сервера, если это необходимо.

0 голосов
/ 18 сентября 2018

Если вы можете основывать вызовы на вещах, происходящих в базе данных, хорошим предложением @ lasse является наличие службы, которая извлекает данные и выполняет необходимые вызовы.

Кроме этого, SQLCLR, вероятно, ваш лучшийставка.Я знаю, что у SQL Server Service Broker есть понятие внешних вызовов, но когда я изучил его несколько лет назад, производительности не было.

Третий вариант - использование служб машинного обучения SQL Server иего возможности Python для вызова из базы данных и позволить вашим вызовам выполняться снаружи.Однако для этого потребуется SQL 2017. В 2016 году вы могли бы использовать R, но я не знаю, есть ли у R возможности делать то, что вы хотите.

Надеюсь, это поможет!

Нильс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...