В интересах полноты существует пара других решений, которые, на мой взгляд, являются более ортодоксальными и устоявшимися, чем решения, основанные на классах SqlDependency (и SqlTableDependency).SqlDependency был разработан для обновления кэша веб-сервера, поэтому он не обеспечивает такой устойчивости при нагрузке, которую вы бы требовали от производителя событий.
В целом есть еще четыре параметра, которые здесь еще не упомянуты:
- Отслеживание изменений
- CDC
- Триггеры в очереди
- CLR
Отслеживание изменений
Источник: https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-tracking-sql-server
Отслеживание изменений - это упрощенный механизм уведомлений на SQL-сервере.По сути, номер версии всей базы данных увеличивается с каждым изменением любых данных.Затем номер версии записывается в таблицы отслеживания изменений с битовой маской, включающей имена столбцов, которые были изменены.Обратите внимание, что фактическое изменение не сохраняется.Уведомление содержит только информацию о том, что конкретный объект данных изменился.Кроме того, поскольку управление версиями таблицы изменений является накопительным, уведомления об изменениях для отдельных элементов не сохраняются и перезаписываются более новыми уведомлениями.Это означает, что если сущность изменяется дважды, отслеживание изменений будет знать только о самых последних изменениях.
Чтобы зафиксировать эти изменения в c #, необходимо использовать опрос.Таблицы отслеживания изменений могут быть опрошены, и каждое изменение может быть проверено, чтобы увидеть, представляет ли он интерес.Если это представляет интерес, необходимо затем перейти непосредственно к данным, чтобы получить текущее состояние.
Сбор данных изменений
Источник: https://technet.microsoft.com/en-us/library/bb522489(v=sql.105).aspx
Сбор данных изменений (CDC) является более мощным, но наиболее дорогостоящим, чем отслеживание изменений.Сбор данных изменений будет отслеживать и уведомлять об изменениях на основе мониторинга журнала базы данных.Благодаря этому CDC имеет доступ к фактическим данным, которые были изменены, и ведет учет всех индивидуальных изменений.
Аналогично отслеживанию изменений, чтобы зафиксировать эти изменения в c #, необходимо использовать опрос.Однако в случае CDC информация об опросе будет содержать детали изменения, поэтому нет необходимости возвращаться к самим данным.
Триггеры в очереди
Источник: https://code.msdn.microsoft.com/Service-Broker-Message-e81c4316
Этот метод зависит от триггеров на таблицах, из которых требуются уведомления.Каждое изменение запускает триггер, и триггер записывает эту информацию в очередь компонента Service Broker.Затем к очереди можно подключиться через C # с помощью обработчика сообщений Service Broker (пример по ссылке выше).
В отличие от отслеживания изменений или CDC, триггеры в очереди не зависят от опроса и, таким образом, обеспечивают события в реальном времени.
CLR
Это метод, который явидел б, но я бы не советовал.Любое решение, которое использует CLR для внешней связи, в лучшем случае является взломом.CLR был разработан, чтобы упростить написание сложного кода для обработки данных за счет использования C #.Он не был предназначен для подключения к внешним зависимостям, таким как библиотеки сообщений.Более того, связанные с CLR операции могут прерваться в кластеризованных средах непредсказуемым образом.
При этом настройка довольно проста, так как все, что вам нужно сделать, это зарегистрировать сборку сообщений в CLR, а затем вы можете вызватьс помощью триггеров или заданий SQL.
1055 *
Резюмируя ... 1059 * Он всегда был источником удивления мне, что Microsoft упорно отказывается решать эту проблему пространства.Событие из базы данных в код должно быть встроенной функцией продукта базы данных.Учитывая, что Oracle Advanced Queuing в сочетании с событием ODP.net
MessageAvailable предоставили надежную базу данных для C # более, чем
10 лет назад , это ужасно от MS.
В результате этого ни одно из решений, перечисленных в этом вопросе, не очень хорошее.Все они имеют технические недостатки и имеют значительную стоимость установки.Microsoft, если вы слушаете, пожалуйста, разберитесь с этим печальным положением дел.