【问题标题】:Speeding up http web request in WCF invoked method在 WCF 调用方法中加速 http Web 请求
【发布时间】:2013-07-30 18:01:56
【问题描述】:

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

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

有时会发生从未收到短信的情况。经过一些调试后,我发现当我删除异步调用时,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");
    }

请帮忙

【问题讨论】:

    标签: c# wcf asynchronous sms httprequest


    【解决方案1】:

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

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

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

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

    【讨论】:

    • Tnx 的答案。例如我发送 1 条短信并等待接收,然后发送第二条并等待接收,然后发送第三条和 BOOM 异常。在我的浏览器中,我在一秒钟内按下刷新(可能更少)并且效果很好(无需等待到达)。感谢您使用队列的建议。但我一直在寻找可以用我所拥有的东西做的事情。你认为这可能吗?浏览器是如何做到的? (铬)
    • 请问您为什么要等待收到它? SMS 不会立即发送,并且可能需要很长时间才能到达。因此,我建议使用可以以与请求无关的方式维护传输状态的数据库。我的猜测是,在您的代码中,线程池被阻塞等待接收短信,而在您的浏览器案例中,没有人在等待其他人。目前只是猜测。
    • 你在我的代码中误解了我,我不等它。我在精神上等待它被接收。在上述评论的示例中,我向自己发送短信并等待电话响起。我的代码有问题,所以它是异步调用,我不在乎响应是什么。
    • 您是否使用第三方 SMS 提供商,他们会限制您的 SMS 发送吗?
    • 这是我用我的应用程序发送的代码 - 不好用我的网络浏览器 - 好它看起来像SomeURL?With=Params&something=else
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多