WCF и более длительная операция после выполнения службы - PullRequest
1 голос
/ 27 октября 2009

У меня есть служба WCF со многими методами. Я хотел бы, чтобы после выполнения одного из методов электронные письма были отправлены некоторым пользователям. Отправка электронной почты может быть длительной операцией, и я не хочу, чтобы вызывающий метод ожидал этого времени. Вызывающий должен получить ответ, как только он будет рассчитан, а письма должны быть отправлены позже. Я думал об отправке электронных писем в новом потоке, но я не уверен, правильно ли запускать новые потоки, когда служба WCF размещена в IIS. Может ли кто-нибудь сказать мне, что является лучшей практикой в ​​таких случаях?

Заранее спасибо Лукаш Глаз

Ответы [ 2 ]

0 голосов
/ 27 октября 2009

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

0 голосов
/ 27 октября 2009

Нет ничего изначально проблемного в запуске новых потоков, когда служба размещается в IIS, но учтите следующее:

Насколько важно, чтобы электронное письмо было отправлено?

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

Если вы можете жить с этим, отправка электронного письма из новой темы - это нормально.

Если, с другой стороны, вы должны гарантировать, что письмо всегда будет отправлено, вам нужно будет передать эту операцию какой-либо транзакционной очереди (MSMQ, таблица базы данных или какой-либо другой транзакционный механизм).

В этом случае вам потребуется еще один надежный фоновый процесс (на ум приходит служба Windows), который извлекает сообщения из очереди и отправляет электронные письма. Эта архитектура гарантирует, что электронные письма будут в конечном итоге отправлены, даже если сервер внезапно перезагрузится. Однако это гораздо более сложная установка, поэтому я думаю, что вы должны реализовать ее только в том случае, если в требованиях указано, что электронные письма должны отправляться.

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