2010-06-10 7 views
0

Я получаю странную проблему с потоками в рабочем процессе SharePoint, о котором я хотел бы узнать больше. Я пытаюсь отправить электронное письмо с помощью SPUtility.SendEmail асинхронно, создав новый поток, чтобы сделать это. Это успешно работает в конце рабочего процесса для сводной электронной почты. Я попытался сделать то же самое, чтобы заменить уведомление задачи по электронной почте, но в конечном итоге получаю следующее сообщение об ошибке:Отправка электронной почты асинхронно внутри рабочего процесса SharePoint

Microsoft.SharePoint.SPException: Attempted to make calls on more than one thread in single threaded mode.

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

[ПРИМЕЧАНИЕ] Причина, по которой я использую потоки для отправки писем, связана с тем, что SPUtility.SendEmail является блокирующим вызовом, а в случае медленного SMTP-сервера пользователь может вернуть свою страницу до минута. И причина, по которой я отправляю электронные письма, в первую очередь потому, что стандартные сообщения электронной почты сосут большое время.

ответ

4

SPUtility.SendEmail использует параметр SPWeb, который НЕ является потокобезопасным. SPSite, объекты SPWeb на самом деле являются потоковыми, поэтому вы не должны передавать их из одного потока в другой. Вы должны передать идентификатор сайта и URL-адрес веб-сайта в новый поток и воссоздать там объект SPWeb.

+0

Вы правы, вот где моя проблема. Создание нового SPWeb в потоке устраняет проблему. Благодаря! –