0

您好我正在编写一个托管在 IIS 上的 WCF 服务。它作为控制台应用程序在我的服务器上运行。我有一个由上述服务调用的静态方法。

在这种方法中,我有发送短信的异步 Web 请求。

有时会发生从未收到短信的情况。经过一些调试后,我发现当我删除异步调用时,Web 请求有时会引发异常并显示消息:“操作已超时”。当我尝试在短时间内发送许多短信时会发生这种情况。

但是当我在浏览器中输入网络请求的地址时,一切正常。(我按刷新的时间,无论多快,我收到短信的次数)如何用我所拥有的来实现。

到目前为止我有

    public static bool DoTheRequest(string number, string message)
    {
        try
        {
            HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(string.Format("http://SomeURL?With={0}&something={1}", number, message));
            myReq.BeginGetResponse(FinishWebRequest, myReq);
        }
        catch (Exception ex)
        {
            throw ex;
        }

        return true;
    }

    static void FinishWebRequest(IAsyncResult result)
    {
        HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;
    }

编辑:

以及服务定义:

    [OperationContract]
    void TestSms(string number);

和实施:

    public void TestSms(string number)
    {
        Utilities.DoTheRequest(number, "THIS IS A TEST");
    }

请帮忙

4

1 回答 1

2

根据您在短时间内调用 send-sms 函数的次数,我推测它的执行速度比您在浏览器中刷新的速度要快得多 - 而且您正在设法淹没您所提供的任何服务与您的 SMS 通话一起使用。

在这种情况下,我建议您的 Web 服务方法实际上将 SMS 放入队列中,并且某种旨在不限制实际发送 SMS 的 API 的后台工作线程负责批处理这些短信并发送它们。

更好的是,为了解决机器和软件不完美的问题,闪电确实来袭,我建议你将 SMS 推送到某种后端数据存储中,然后保留它。然后,后台工作人员作业/线程负责查找所有未发送的 SMS 并尝试发送它们(但发送不超过“每分钟 x 条”),每条短信在完成后都被标记为“已发送”。

这还有一个额外的好处,即您可以在备份数据存储中发送任意数量的 SMS,如果机器死机,它可以从中断的地方继续,如果您遇到一些故障,可以重试它们。

于 2013-07-30T18:16:26.943 回答