C# 如何设置同步c上BeginInvoke中每分钟发送请求的限制#
我有一个来自其中一个SMS提供商的批量SMS Soap web服务,该web服务每分钟限制300个请求,如果我发送的请求超过300个,我会收到一个限制错误,我不知道如何在BeginInvoke处理请求,所以我不会向web服务发送超过300分钟的请求。我如何通过线程–BeginInvoke在我的应用程序中实现此限制?我的应用程序是由C#Asp.net编写的 这是我向Oprator Webservice发送所有请求的部分代码:C# 如何设置同步c上BeginInvoke中每分钟发送请求的限制#,c#,asp.net,synchronization,C#,Asp.net,Synchronization,我有一个来自其中一个SMS提供商的批量SMS Soap web服务,该web服务每分钟限制300个请求,如果我发送的请求超过300个,我会收到一个限制错误,我不知道如何在BeginInvoke处理请求,所以我不会向web服务发送超过300分钟的请求。我如何通过线程–BeginInvoke在我的应用程序中实现此限制?我的应用程序是由C#Asp.net编写的 这是我向Oprator Webservice发送所有请求的部分代码: endCache.SetCacheItem("Success", 0);
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]);
}
谢谢你有两种方法,第一种是一秒钟只发送5条短信,这很奇怪。第二种方法是使用队列。将你想发送的短信放入队列中,同时保留按时间发送的短信。
然后,您可以检查您是否未通过从该队列中弹出的限制并发送它。感谢您的帮助,我可以发送300个请求,每个请求发送100条短信。您有其他解决方案吗?感谢您排队(sendingQueue),将您的短信放入发送队列,而不是直接发送短信。另一个进程读取sendingQueue并弹出消息并发送它。从sendingQueue读取的位置可以控制是否发送sms。你收到了吗?