首页 > 解决方案 > 如何在同步 c# 中的 BeginInvoke 中设置限制发送请求每分钟

问题描述

我有一个来自 SMS 提供商的批量 SMS Soap WebService,此 Web 服务每分钟限制 300 个请求,如果我发送超过 300 个请求,我会收到限制错误我不知道如何在 BeginInvoke 处理请求所以我不要向 Web 服务发送请求超过 300 分钟。如何通过 Threading – BeginInvoke 在我的应用程序中实现此限制?我的应用程序是由 C# Asp.net 编写的

这是我将所有请求发送到 Oprator Webservice 的代码的一部分:

endCache.SetCacheItem("Success", 0);
                    SendCache.SetCacheItem("Failed", 0);
                    SendCache.SetCacheItem("Invalid", 0);


                    object[] obj = new object[] { MessageID, msgParts, smsPrice, to,from, isUnicode, body };
                    IAsyncResult ar = sendIt.BeginInvoke(sender, to, body, isFlash,ref opCode, MessageID.ToString(), new AsyncCallback(SendCallback), obj);

                    SendCache.SetCacheItem("Result", ar);

private void SendCallback(IAsyncResult ar)
{
    string[] opCode = null;

    SendCache.SetCacheItem("Result", ar);


    AsyncResult aResult = (AsyncResult)ar;
    SendSmsDelegate sendIt = (SendSmsDelegate)aResult.AsyncDelegate;
    byte[] retVal = null;


        retVal = sendIt.EndInvoke(ref opCode, ar);
        SendCache.SetCacheItem("Retval", retVal);




    object[] obj = (object[])ar.AsyncState;

    ComputeReceptions((long)obj[0], (int)obj[1], (double)obj[2], (string[])obj[3], retVal, opCode, (long[])obj[4], (int)obj[5], (int)obj[6], (bool)obj[7]);


}

谢谢

标签: c#asp.netsynchronization

解决方案


有两种方法,一种是在一秒钟内仅发送 5 条短信,这很奇怪。第二种是使用队列。将您要发送的短信放入队列中,并按时间保留您发送的短信。然后您可以检查您是否没有通过从该队列弹出的限制并发送它。


推荐阅读