这似乎很简单。我需要从一些ASP.NET应用程序发送电子邮件。我需要始终如一地执行此操作,而不会出现奇怪的错误,并且CPU利用率无法通过屋顶。我不是在谈论群发电子邮件,只是偶尔发送电子邮件。.NET发送电子邮件的最佳方法(System.Net.Mail有问题)
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)运行的CPU跳转并保持100%,直到应用程序池被回收为止。无论出于何种原因,运行mscorwks.dll!CreateApplicationContext的线程都是罪魁祸首。
这具有非常好的副作用,如果您在持续100%CPU使用率的Web主机上运行,您将禁用应用程序池。所以这并不像有些人所建议的那样微不足道。
所以我的问题是做什么?我需要做的是如此简单;然而,让这些“连接打开太多”的错误是不可接受的,也不是100%的CPU使用率。我不想购买第三方组件,并不是因为我便宜,但是我购买了足够的组件和MSDN订阅,看起来很疯狂,为了简单的SMTP功能需要花费100- 300美元。
我读到设置MaxIdleTime更高可以帮助,但我对此持怀疑态度。我不想冒我的应用程序池被禁用,因为微软不想遵循SMTP规范。
编辑:我看着quiksoft.com组件,但它不支持SMTP认证,它的成本为500美元。必须有解决这个问题的办法。
根据您提供的链接,它显示错误已被修复。有没有可能你错过了一个服务包? – overslacked 2009-05-30 19:45:56
我看到它说“已解决”的地方。但是我没有看到其他的音符。我已经将服务器更新到最新的SP以及所有这些。当我看到之前通常看起来MS只是意味着他们不会修复它。他们也有我在那里列出的“解决方法”。这可能会更清楚。 – JustAProgrammer 2009-05-30 21:31:22