HttpHandler isReusable, true или false для отправки ~ 75 писем одновременно - PullRequest
2 голосов
/ 19 апреля 2011

Я пытаюсь разобраться с этим isReusable свойством интерфейса IHttpHandler, но мне нужна ваша помощь.

Я вызываю событие каждый раз, когда документ сохраняется в CMS, которую я использую, и я хочу, чтобы это событие вызвало действие для HttpHandler, который будет отправлять электронные письма пользователям, подписанным на этот документ. Будет примерно 75 электронных писем , и с использованием моей службы доставки электронной почты (Почтовый штемпель) это займет около 1-5 секунд на одно электронное письмо , поэтому всего около 2-5 минут .

Обработчик получит только 1 параметр (идентификатор документа), а затем выяснит, кому отправлять электронные письма, и, конечно, отправит их.

В этом случае целесообразно установить для свойства isReusable значение true? И почему?

Очень ценится.

Ответы [ 2 ]

3 голосов
/ 19 апреля 2011

Если вы просто хотите реализовать свой собственный HttpHandler с использованием интерфейса IHttpHandler, вам нужно реализовать функцию и свойство интерфейса.Функция ProcessRequest () используется для реализации вашего собственного пользовательского обработчика запросов, который возвращает ответ в соответствии с вашим кодом.

IsReusable предназначен для объединения объектов обработчика.Поэтому, если ваш обработчик не удерживает какое-либо конкретное состояние запроса, вы можете вернуть true, чтобы запросить его пул.Обычно это делается, когда ваш обработчик выполняет очень дорогую инициализацию, в противном случае, вероятно, не имеет значения, возвращаете ли вы true или false (так как простое размещение объектов довольно недорого в .NET).Кстати, страницы никогда не объединяются, кстати.

1 голос
/ 19 апреля 2011

Простой тест IsReusable для возврата true, если обработчик является поточно-ориентированным. Поэтому, как указал Адам, обработчик не должен иметь состояния.

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

Если это вообще возможно, вы могли бы рассмотреть служебную шину и таким образом передать работу другому процессу. e.g.:

bus.Send(new SendEMailCommand { id = theId });

Это поставит в очередь ваши запросы электронной почты, позволяя вам контролировать, сколько параллельных потоков вы разрешаете для этой обработки - потоков, которые работают вне IIS в их собственном AppDomain:)

Просто мысль.

...