Questo sembra essere abbastanza semplice. Devo inviare e-mail da alcune applicazioni ASP.NET. Devo farlo in modo coerente senza strani errori e senza l'utilizzo della CPU che passa attraverso il tetto. Non sto parlando di e-mail di massa, solo e-mail occasionali..NET Metodo migliore per inviare e-mail (System.Net.Mail ha problemi)
System.Net.Mail appare per essere rotto in modo orribile. SmtpClient non emette il comando Quit (potrebbe essere perché Microsoft (R) non è interessato a seguire le specifiche), quindi una connessione è lasciata aperta. Pertanto, se qualcuno tenta di inviare un'email prima che la connessione alla fine si chiuda, è possibile ottenere errori dal server SMTP su troppe connessioni aperte. Questo è un bug che Microsoft (R) non è completamente interessato a correggere. Vedi qui:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=146711
Inoltre, se si guarda intorno un po 'consigliato l'utilizzo di questo codice per risolvere questo problema:
smtpClient.ServicePoint.MaxIdleTime = 1;
smtpClient.ServicePoint.ConnectionLimit = 1;
Ok, sì che significa "risolvere" il problema dei collegamenti essere lasciato Aperto. Tuttavia, in modo coerente, provalo su un server, se lo desideri, provoca la CPU su cui il processo (in questo caso w3wp.exe) è in esecuzione per saltare e rimanere al 100% fino a quando il pool di applicazioni non viene riciclato. Per qualsiasi motivo, il thread che esegue mscorwks.dll! CreateApplicationContext è il colpevole.
Questo ha l'effetto collaterale molto piacevole che se si sta eseguendo su un host Web che si acciglia su un utilizzo prolungato della CPU al 100%, si otterrà il pool di applicazioni disabilitato. Quindi questo non è così banale come alcuni suggeriscono.
Quindi la mia domanda è cosa fare? Quello che devo fare è così semplice; tuttavia ottenere quegli errori "troppe connessioni aperte" non è accettabile e nemmeno l'utilizzo della CPU al 100%. Non voglio acquistare un componente di terze parti, non perché sono a buon mercato, ma compro abbastanza componenti e abbonamento MSDN che sembra folle dover sborsare $ 100- $ 300 per la semplice funzionalità SMTP.
Ho letto che l'impostazione di MaxIdleTime superiore può essere d'aiuto ma sono scettico su questo. Non voglio mettere a rischio il blocco del pool di app solo perché Microsoft non desidera seguire le specifiche SMTP.
Modifica: Ho esaminato i componenti di quiksoft.com, tuttavia non supporta l'autenticazione SMTP e costa $ 500. Deve esserci una soluzione a questo problema.
In base al collegamento fornito, il bug è stato corretto. È possibile che manchi un service pack? – overslacked
Ho visto dove si dice "risolto". Tuttavia non ho visto altre note. Ho aggiornato il server all'ultimo SP e tutto il resto. Quando l'ho visto prima di solito sembra che MS significhi che non lo risolveranno. Hanno anche il "workaround" che ho citato elencato lì. Potrebbe essere molto più chiaro. – JustAProgrammer