我们需要从我们的应用程序发送大量SMS,为此我们正在使用Ooredoo Messaging Service,但是由于我们必须一次从该应用程序向10000多名用户发送不同的消息。有时一一发送会导致严重的网关错误(502),并且在发送200条以上的SMS后会停止执行。因此,请帮助我找出我在做错什么。
MessengerSoapClient messenger = null;
AuthResult authData = null;
SoapUser user = null;
Constants constant = new Constants();
SendResult sendResult = null;
string originator = string.Empty;
SmsStatus status = null;
foreach (DataRow customer in smsCustomerList.Rows)
{
Task.Run(() =>
{
string transactionId = string.Empty;
try
{
if (messenger == null || user == null)
{
messenger = new MessengerSoapClient("MessengerSoap");
user = new SoapUser();
user.CustomerID = constant.SmsCustomerID;
user.Name = constant.SmsUsername;
user.Language = "en";
user.Password = constant.SmsPassword;
authData = messenger.Authenticate(user);
}
if (authData.Result == "OK")
{
Console.WriteLine("Authenicated");
}
else
{
Console.WriteLine("Error: " + authData.Result);
}
originator = authData.Originators[0];
sendResult = messenger.SendSms(user, originator, customer["smsData"].ToString(), customer["phone"].ToString(), MessageType.ArabicWithLatinNumbers, customer["defDate"].ToString(), false, false, false);
transactionId = sendResult.TransactionID;
}
catch (Exception ex)
{
logger.Error("Exception occured at {0},{1}", ex.Message, ex.StackTrace);
if (sendResult == null)
{
transactionId = Guid.Empty.ToString();
}
else
{
transactionId = string.IsNullOrEmpty(sendResult.TransactionID) ? Guid.Empty.ToString() : sendResult.TransactionID;
}
messenger = null;
}
status = messenger.GetSmsStatus(user, transactionId, true);
if (status != null && status.Result == "OK")
{
_service.UpdateSmsStatusByTransactionId("GroupMessages", transactionId, 1);
}
}).ConfigureAwait(false).GetAwaiter();
}