代码之家  ›  专栏  ›  技术社区  ›  ebattulga

在ASP.NET中运行Web服务的时间

  •  0
  • ebattulga  · 技术社区  · 15 年前

    我正在创建邮件发件人Web服务。每10秒发送一封邮件。我的邮件总数是1500封。此操作在4.16小时后结束(1500*10/60/60)。

    我的Web服务方法在这里>>

    [WebMethod]
    public string BroadcastMail(DataView dv, string title, string body,MailAddress FromAddress, string[] fileattachments)
        {
            SmtpClient client = new SmtpClient("smtp.mysite.com");
            client.EnableSsl = false;
            client.UseDefaultCredentials = true;
            client.Credentials = new NetworkCredential("*********", "********");
    
            foreach (DataRowView item in dv)
            {
                MailMessage msg = new MailMessage();
                msg.From = FromAddress;
                msg.Subject = title;
                msg.IsBodyHtml = true;
                msg.BodyEncoding = Encoding.UTF8;
                msg.Body = body.AsciiToUnicode();
                msg.To.Add(email);
                client.Send(msg);
                Thread.Sleep(10000);           
            }
        }
    

    你想问我。为什么你要等10秒钟。因为我的邮件提供商同意每1小时发送300封邮件。

    我要从ASPX页面呼叫。

    我的问题是:
    如何从ASPX页面调用此服务?

    这个Web服务是否工作?

    你还有别的主意吗?

    4 回复  |  直到 12 年前
        1
  •  3
  •   Rob    15 年前

    没有理由把它作为一个Web服务来实现,特别是当您在其中有10秒钟的睡眠,可能会发生多次,这可能会超时。此外,作为ASP.NET下的一个长期运行的过程,您会面临应用程序池回收丢失任何尚未发送的邮件的风险。

    一种更简单/更好的处理方法是将电子邮件存储到数据库中,然后从数据库中处理它们,在发送电子邮件后从表中删除记录。如果您使用类似于Windows服务的服务,它也会更加健壮。( Web服务)或由 Scheduled Task 执行发送每个电子邮件的代码。

    综上所述:

    • 使用一个睡眠和发送多封电子邮件的Web服务可能非常不可靠
    • 使用Windows服务或计划任务

    另外,您的代码有一行 msg.To.Add(email); 但是变量 email 哪里都没有申报?

        2
  •  1
  •   Will A    15 年前

    我认为你在这里的最佳选择是在BroadcastMail方法中生成一个单独的线程,并让该线程处理邮件——这样你就可以在触发广播的同时及时返回BroadcastMail方法。

    不过,我不是一个ASP.NET程序员,如果这种方法会遇到与流程回收等相关的问题,我准备被击落。

        3
  •  0
  •   sadiq nawaz    12 年前

    服务CS

    使用系统; 使用system.collections.generic;

        4
  •  -1
  •   Gary L Cox Jr    15 年前

    另外,您迭代了一个名为“dv”的集合,但您从未使用过该集合,这是为什么?

    推荐文章