Асинхронная отправка электронной почты внутри рабочего процесса SharePoint - PullRequest
0 голосов
/ 10 июня 2010

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

Microsoft.SharePoint.SPException: Попытка звонить на более чем одна нить в однопоточном режиме.

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

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

1 Ответ

4 голосов
/ 10 июня 2010

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

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