Это кажется довольно прямым. Мне нужно отправить электронное письмо из некоторых приложений ASP.NET. Мне нужно сделать это последовательно без странных ошибок и без использования процессора, проходящего через крышу. Я не говорю о массовом рассылке по электронной почте, просто по электронной почте.
System.Net.Mail выглядит ужасно нарушенным. SmtpClient не выполняет команду Quit (возможно, Microsoft (R) не интересуется следующими спецификациями), поэтому соединение остается открытым. Поэтому, если кто-то пытается отправить сообщение по электронной почте до этого соединения наконец, вы можете получить ошибки с SMTP-сервера относительно слишком большого количества подключений. Это ошибка, по которой Microsoft (R) полностью не заинтересована в исправлении. См. Здесь:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=146711
Кроме того, если вы посмотрите вокруг, предложите использовать этот код для решения этой проблемы:
smtpClient.ServicePoint.MaxIdleTime = 1;
smtpClient.ServicePoint.ConnectionLimit = 1;
Хорошо, да, что "решает" проблему закрытия соединений. Тем не менее, это последовательно, попробуйте на сервере, если хотите, вызывает процессор, на котором выполняется процесс (в данном случае w3wp.exe), для перехода и остаётся на уровне 100%, пока ваш пул приложений не будет повторно использован. По какой-то причине причиной является поток, запускающий mscorwks.dll! CreateApplicationContext.
Это имеет очень хороший побочный эффект: если вы работаете на веб-хостинге, который хмурится устойчивым 100% -ным использованием ЦП, вы отключите свой пул приложений. Так что это не так тривиально, как предлагают некоторые.
Итак, мой вопрос - что делать? Что мне нужно сделать, так просто; однако получение этих ошибок "слишком много подключений открыто" неприемлемо и не является 100% -ным использованием ЦП. Я не хочу покупать сторонний компонент, а не потому, что я дешевый, но я покупаю достаточно компонентов и подписку на MSDN, что кажется сумасшедшим, чтобы выложить $100-300 за простую функциональность SMTP.
Я читал, что настройка MaxIdleTime выше может помочь, но я скептически отношусь к этому. Я не хочу, чтобы мой пул приложений был отключен только потому, что Microsoft не хочет следовать спецификации SMTP.
Изменить: Я смотрел на компоненты quiksoft.com, однако он не поддерживает аутентификацию SMTP и стоит 500 долларов. Должно быть решение этой проблемы.