Служба Windows с резьбой - проблемы SmtpClient - PullRequest
2 голосов
/ 28 февраля 2011

Мы пишем многопоточный сервис, используя topshelf / windsor / masstransit, чтобы забрать сообщения из MSMQ и затем отправить электронное письмо с вложением PDF.

Время от времени метод SmtpClient.Send () выдает следующее сообщение об ошибке:

Асинхронный вызов уже выполняется. Он должен быть завершен или отменен, прежде чем вы сможете вызвать этот метод.

У меня установлен SmtpClient как .LifeStyle.Transient в Виндзоре, поэтому я понимаю, что каждый поток должен получить свой экземпляр?

Любая идея, как я могу обойти это, если не считать блокировку этой части кода. Что бы как-то победить назначение потоков.

Заранее спасибо

1 Ответ

4 голосов
/ 28 февраля 2011

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

Я бы попробовал подтвердить, что вы действительно получаете новый экземпляр SmtpClient - убедитесь, что вы не вставляете его в статическое поле или каким-либо иным образом не заканчиваете тем же указателем. Вы можете попробовать выкладывать результат из GetHashCode() в консоль каждый раз, когда отправляете электронное письмо, чтобы проверить, все ли они используют один и тот же объект.

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

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