Насколько разумно отправлять электронные письма через CLR enable (c # dll) с SQL Server 2008? - PullRequest
0 голосов
/ 08 сентября 2011

Мой вопрос о абстрактной точке зрения инженера-программиста :

Предположим, я хочу отправить электронное письмо после каждой вставки строки в таблицу.

Какой подход будет умнее и "по книге"?

  1. создать сборку C # / CLR, которая будет отправлять почту
  2. включить CLR в SQL Server
  3. создать триггер после вставки, используя функцию этой сборки для отправки почты

или

  1. в самой прикладной программе C #, после вставки в БД - отправить электронное письмо.

Ответы [ 3 ]

2 голосов
/ 08 сентября 2011

Используйте Database Mail , который является встроенным решением электронной почты для SQL Server, если вы собираетесь отправлять электронную почту с сервера (а не писать свое собственное решение).

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


Что касается, теперь решение следует ли использовать это, вызывать из триггера или хранимого процесса, или выполнять работу в приложении, это зависит от того, какой выудобнее.В любом случае вам нужно учитывать различные условия отказа, а не просто счастливый путь.Если часть SQL завершается успешно, а затем происходит сбой (или уничтожение приложения с помощью диспетчера задач) перед отправкой электронного письма, насколько серьезным будет сбой?Какие меры по смягчению последствий вы должны предпринять?

1 голос
/ 08 сентября 2011

Я согласен с Дэмиеном, что если вы действительно хотите делать внутри базы данных, вам лучше использовать База данных Mail .

Я предлагаю сделать это в любом случае из вашего приложения на C #, потому что я думаю, что оттуда у вас намного лучший контроль.

что если в какой-то момент вы вставите 100.000 записей одновременно или в несколько последовательных транзакций?

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

Я также, в общем-то, немного против триггеров, я предпочитаю оставлять базу данных в одиночестве и, за исключением хранимых процедур, не заставляя ее делать слишком много; гораздо проще отлаживать и отслеживать / отслеживать / записывать, что происходит в клиентском (или серверном) приложении .NET.

вот мои два цента, у каждого может быть свой подход.

0 голосов
/ 08 сентября 2011

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

Но если вам нужно отправлять высококачественные отчеты по почте (например, PDFс персонализированным HTML), то вы бы порекомендовали поставить в очередь задачи для «отправляемых писем», например, в таблице, а затем создавать и отправлять электронные письма асинхронно, например, с использованием SSRS, Crystal и т. д. Это также будет иметь преимущества в виде лучшего аудитаи возможность переключать каналы (например, печатать вместо электронной почты), не нарушая механизм очередей SQL.

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