在同一时间点发送短信

Nag*_*agu 2 c# asp.net sms multithreading

以前我发布了一个关于多线程的问题.实际上我的意图是通过使用c#和asp.net应用程序在同一时间点(例如:凌晨12:00)向1000(或更多)人发送短信.可以选择多线程概念来实现这一目标吗?

bal*_*dre 6

这个概念不需要多线程......

这个概念更像是一个任务经理/ Cron工作

  1. 创建一个ASPX脚本,查看时间并执行所需的方法
  2. 设置任务管理器以每隔xx分钟运行此脚本
  3. 创建一个方法,该方法获取人员列表并通过SMS API发送SMS,并调用它,例如.SendSMSFromList(列出usersList,字符串消息){}
  4. 现在设置一切,你将随时运行它(只需在ASPX脚本中设置)

如果你需要任何代码,请随时告诉我.


编辑完成所有步骤


如果您有托管解决方案,则在您的主机控制面板中,您可以设置一些任务计划,您可以设置为每n分钟运行一次脚本页面,如果是,请通过后续步骤.另一方面,如果您正在运行自己的服务器(IIS),请先执行此操作.

  • 从此位置安装Windows的cUrl ,并将curl.exe添加到C:\ WINDOWS
  • 打开任务管理器(控制面板>管理工具> win7上的任务计划程序)
  • 像这样创建一个新任务
  • 运行命令

curl http://localhost/yourApp/taskManager.aspx

通过这种方式,您只需将系统配置为运行文件,就像在浏览器中执行该链接一样,每15分钟运行一次.

现在我们需要创建taskManager.aspx文件

public partial class taskManager : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        DateTime dt = DateTime.Now;

        // Run after midnight
        if (dt.Hour == 0 && dt.Minute <= 15)
        {
            Write2Log("Schedule Job Started", LogType.INFO);

            SendSMSFromList(
                GetUsersList(), 
                GetSMSMessage());

            Write2Log("Schedule Job Finished", LogType.INFO);
        }
    }

    private string GetSMSMessage()
    { 
        // Fetch the text from DB...

        return "This is the message content that I will send as SMS"; 
    }

    private List<string> GetUsersList()
    { 
        // fetch the list form DB...

        return new List<string>(); 
    }

    private void SendSMSFromList(List<string> usersList, string message)
    { 
        // send SMS's
        foreach (string phoneNr in usersList)
        { 
            // send message
            mySMSAPI.Send(phoneNr, message);
        }
    }

    private void Write2Log(string text, LogType type)
    { 
        // Log to a file what's going on...
        try
        {
            string filename = HttpContext.Current.Server.MapPath("") + "\\status.log";
            using (StreamWriter sw = new StreamWriter(filename, true))  // open to append
            {
                // example: 2008-12-17 13:53:10,462 INFO - Schedule Job Finished
                string write = String.Format("{0} {1} - {2}",
                                DateTime.Now,
                                type.ToString(),
                                text);

                sw.WriteLine(write);
            }
        }
        catch (Exception)
        { }
    }

    private enum LogType
    { INFO, WARNING, ERROR }
}
Run Code Online (Sandbox Code Playgroud)

完成...

为了这个例子,我只用一个文件制作了所有东西,你应该把事情分开......但我所追求的是向你展示它的原理.