我正在向多个电话号码发送消息。 移动号码存储在一个阵列中。
string phNums = "91999999999,9199999998....";.
string[] phNos = phNums.Split(',');
但是消息并未到达所有收件人,主要是收到数组末尾附近的数字。 该消息通过SMS服务提供商提供的URL发送,其中嵌入了电话号码和消息。
for (int i = 0; i < phNos.Length; i++)
{
url = @"http://aaa.bbb.ccc.dd/HTTPMTAPI?User=abc&Password=pqr&FromAddr=xyzSMS&DestNo=" + phNos[i] + "&msg=" + message;
Uri targetUri1 = new Uri(url);
System.Net.HttpWebRequest hwb1;
hwb1 = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(targetUri1);
hwb1.GetResponse();
}
作为替代方案,我也使用了Webclient(),但仍无法保证成功的邮件传递。
for (int i = 0; i < phNos.Length; i++)
{
WebClient cli= new WebClient();
url = @"http://aaa.bbb.ccc.dd/HTTPMTAPI?User=abc&Password=pqr&FromAddr=xyzSMS&DestNo=" + phNos[i] + "&msg=" + message;
cli.DownloadString(url);
}
如何确保不会跳过邮件传递。 只有在下载URL时收到成功的响应时,循环才会进入下一个移动号码,依此类推。 如果还有其他可能的机制,请建议。感谢
答案 0 :(得分:2)
我认为这就是你想要做的事情:
for (int i = 0; i < phNos.Length; i++)
{
url = @"http://aaa.bbb.ccc.dd/HTTPMTAPI?User=abc&Password=pqr&FromAddr=xyzSMS&DestNo=" + phNos[i] + "&msg=" + message;
Uri targetUri1 = new Uri(url);
System.Net.HttpWebRequest hwb1;
hwb1 = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(targetUri1);
System.Net.HttpWebResponse response = hwb1.GetResponse();
if (response != null)
{
int status = (int)response.StatusCode; // this changes the status
// from text response to the
// number, like 404
if (status == 404//or anything else you want to test//)
{
// put your retry logic here, make sure you add a way to break
// so you dont infinitely loop if the service is down or something
}
}
}
答案 1 :(得分:0)
网址有长度限制。您可能会达到此限制,因此您正在丢失跟踪电话号码。您最好的选择是将您的请求分成多个特定大小的请求。
根据以下SO,最好限制您的请求,以便网址不超过2000个字符。
What is the maximum length of a URL in different browsers?