Как лучше всего вызывать веб-сервис из триггера (SQL Server)? - PullRequest
2 голосов
/ 23 февраля 2009

Мне нужно вызвать веб-сервис, когда меняется конкретный столбец в таблице. Я могу решить, какой столбец изменился при вставке / обновлении / удалении, но я не уверен, как мне следует вызывать веб-сервис.

Веб-сервис находится вне сайта, мы немного контролируем его (мы можем запросить изменения и получить достаточно быстрый ответ), но сервис находится в стадии разработки, как и наш код.

Версия SQL Server 2005.

Обновление : большая часть бизнес-логики в этом приложении находится на уровне SQL. Я не могу изменить его и жаловаться на это - не очень хорошее время. Что есть, то есть. Хотелось бы, чтобы был уровень бизнес-логики, но он частично на уровне pre и частично на уровне SQL. Триггер в таблице - самое центральное место.

Ответы [ 5 ]

13 голосов
/ 23 февраля 2009

Не. Накладные расходы веб-службы несовместимы с циклами обработки выполнения базы данных. Извлеките его из базы данных и (желательно) сделайте его асинхронным - см. Ссылки на «очередь / монитор» в различных ответах ниже.

Вероятно, Повторяющийся вопрос тоже.

5 голосов
/ 23 февраля 2009

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

1 голос
/ 23 февраля 2009

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

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

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

1 голос
/ 23 февраля 2009

Большинство магазинов закрывают порт 80 в окне SQL

Также триггер должен быть средним и плавным и возвращаться как можно быстрее, вы не хотите вызывать внешние вещи из триггера

Сбросить данные из триггера в другую таблицу, затем написать другой процесс, который проверяет эту таблицу и затем вызывает веб-службу

1 голос
/ 23 февраля 2009

Функция CLR может сделать запрос веб-службы и обработать ответ. Но в этом случае вам может потребоваться создать функцию CLR и вызвать функцию где-нибудь в ваших объектах SQL.

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

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