c# - 在同一时间发送短信

标签 c# asp.net multithreading sms

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

最佳答案

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

这个概念更像是一个任务管理器/Cron Job

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

如果您需要任何代码,请随时告诉我。


编辑所有步骤


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

  • this location 安装适用于 Windows 的 cUrl并将 curl.exe 添加到 C:\WINDOWS
  • 打开任务管理器(在 win7 上,控制面板 > 管理工具 > 任务计划程序)
  • 创建一个新任务like this
  • 运行命令

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 }
}

完成...

为了示例,我将所有内容都放在一个文件中,你应该把东西分开......但我想要的是向你展示它的原理。

关于c# - 在同一时间发送短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1606127/

相关文章:

javascript - 从动态创建的控件中进行 ajax 调用

c# - 从 C# 枚举到函数/对象名称的 Json 序列化

c# - MVC3 LowerCase 路由值与 UpperCase 的行为不同吗?

c# - 为什么仅当我打开 Fiddler 时才能在 ASP.NET 中调用 API?

c# - 如何使用 EPPlus 创建 A4 纸的 Excel 文件

c# - 如何为 ASP.Net 自定义控件提供新的自定义事件

c# - 如果在 ASP.NET 中不存在,sql server 的用法?

python - python中的线程: retrieve return value when using target=

java - 如何连接任意两个特定线程?

javascript - node.js I/O 非阻塞 - 了解何时最有益