最大数量SmtpClient

时间:2016-09-02 06:09:05

标签: c#-4.0 parallel-processing smtpclient msmq-wcf

我有一个场景,一个MSMQ排队系统...记录及时排队...一个WCF监听器,它监听队列,一旦记录排队就开始处理记录...一些过程并在此之后发送电子邮件(有10个队列和10个听众,其中3个听众负责电子邮件发送)。我面临的问题是电子邮件发送部分,其中较大的数据排队,然后对于某些记录我得到以下错误

Service not available, closing transmission channel. The server response was:       4.3.2 The maximum number of concurrent connections has exceeded a limit, closing transmission channel

发送电子邮件的课程是

public class A
{
    //Method is static as it is a common method used by other processes running in parallel
    public static void SendMail()
    {
        MailMessage mail = new MailMessage();
        SmtpClient client = new SmtpClient();
        ///Email information goes here
        client.Send(mail);
    }
}

我想即使我的方法是静态的,smtp对象每次实例化都会导致问题。即使我增加了并发连接,它也无法解决问题。我有几个解决方法,但需要更多关于此。

  1. 限制号码。并发连接让我们说100。所以即使我有1000个排队的记录,并且监听器开始并行处理它们,smtp进程一次不会使用超过100个连接,等待它完成然后占用下一个100等等。但我不知道该怎么做。
  2. 使用并行foreach循环或SmtpClient.SendAsync方法,但这里我的熟练程度对这些方法并不多,所以我有点害怕(我需要确保没有重大的性能损失)。 所以只需要一个稳定而好的方法来解决这个问题。

0 个答案:

没有答案