C# 在WCF调用方法中加速http web请求

C# 在WCF调用方法中加速http web请求,c#,wcf,asynchronous,sms,httprequest,C#,Wcf,Asynchronous,Sms,Httprequest,您好,我正在编写一个WCF服务而不是托管在IIS上。它作为控制台应用程序在我的服务器上运行。 我有一个静态方法,由所提到的服务调用 在这个方法中,我有一个发送sms的异步web请求 有时,短信从未收到。经过一些调试,我发现当我删除异步调用时,web请求有时会抛出一个异常,并显示消息:“操作已超时”。当我试图在短时间内发送许多SMS时,就会发生这种情况 但当我在浏览器中键入web请求的地址时,一切都正常。(我按刷新的次数,无论多快,我收到短信的次数)这是如何用我所拥有的来实现的 到目前为止我有

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

在这个方法中,我有一个发送sms的异步web请求

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

但当我在浏览器中键入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");
    }
请帮助

根据您在短时间内呼叫发送sms功能的次数,我推测它的速度比您在浏览器中刷新的速度快得多,并且您正在设法将您正在使用的任何服务与您的sms呼叫一起使用

在这个场景中,我建议您的web服务方法实际上将SMS放入队列,而某种后台工作线程(其设计不限制实际发送SMS的API)的任务是批量处理这些SMS并发送它们

更好的是,为了解决机器和软件不完美、闪电确实会击中的问题,我建议您将SMS推到某种后端数据存储中,并将其留在那里。然后,后台工作者作业/线程的任务是查找所有未发送的SMS并尝试发送它们(但发送速度不超过“每分钟x”),完成后每个SMS都标记为“已发送”


这还有一个额外的优势,即您可以在备份数据存储中抛出任意数量的SMS,如果机器死机,它可以从停止的地方恢复,如果出现一些故障,可以重试。

Tnx以获取答案。e、 g.我发送1条短信并等待它被接收,然后我发送第2条短信并等待它被接收,然后我发送第3条短信并发出异常。在我的浏览器中,我在一秒钟内按了刷新(可能更少),效果很好(无需等待到达)。谢谢你提出使用排队的建议。但我想用我所拥有的做点什么。你认为这可能吗?浏览器是如何做到这一点的?(chrome)我可以问一下你为什么等着收到吗?SMS不是即时交付的,可能需要很长时间才能到达。因此,我建议使用一个数据库,其中传输状态可以以请求无关的方式维护。我的猜测是,在您的代码中,线程池在等待SMS接收时被阻塞,而在您的浏览器中,没有人在等待其他人。这只是一个猜测。你在我的代码中误解了我,我不会等的。我在精神上等待它被接受。例如,在上面的评论中,我向自己发送短信,然后等待电话铃响。我的代码有问题,所以它是异步调用,我不关心响应是什么。您是否使用第三方SMS提供商,他们是否限制您的SMS发送?这是我用我的应用程序发送的代码-不好,用我的web浏览器发送-看起来不错