Мы хотим разделить сообщения на несколько (SMS) Текстовые сообщения, если символы превосходящие 136.Добавление временной задержки для многократного текстового сообщения C#
Но мы также хотим, чтобы убедиться, что второе сообщение приходит после того, как первый, и до третьего.
До сих пор из нескольких тестов, которые мы выполнили, похоже, что это работает, но чтобы убедиться, что мы все еще хотим добавить задержку, возможно, на 3 секунды или около того.
Thread.Sleep
правильный способ сделать это, или есть другое решение, чем добавление задержки?
Это код:
// Split message to send them as individual text messages
string[] messages = splitMessage(request["message"], 132);
for (int i = 0; i < messages.Length; i++)
{
HttpWebRequest _wr = (HttpWebRequest)WebRequest.Create(url);
// Use the CredentialCache so you can attach the authentication to the request
CredentialCache mycache = new CredentialCache { { new Uri(url), "Basic", new NetworkCredential(_username, _password) } };
// use Basic Authentication
_wr.Credentials = mycache;
_wr.Method = "POST";
_wr.ContentType = "application/json";
_wr.Timeout = -1; // not sure if necessary but it's not harmful
// _data variable holds the data to be pushed to the server in the request.
// this piece of data holds the request to send a text message from the application
string _data = "{\"outboundSMSMessageRequest\":" +
"{\"address\": \"" + formatedAddress + "\",\"requestId\": \"" + request["requestId"] + "\"" +
",\"outboundSMSTextMessage\": \"" + messages[i] + "\",\"senderAddress\": \"" + request["sender"] + "\"" +
_optional + "}}";
//get a reference to the request-stream, and write the POST data (_data) to it
using (var s = new StreamWriter(_wr.GetRequestStream()))
{
s.Write(_data);
}
//get response-stream, and use a streamReader to read the content
try
{
HttpWebResponse _response = (HttpWebResponse)_wr.GetResponse();
}
catch (WebException ex)
{
using (StreamWriter file = new StreamWriter(@"D:\WEB\SMS\jsonResponse.txt", true))
{
file.WriteLine("No good");
}
// Log exception and throw as for GET example above
Trace.WriteLine("No good");
Trace.WriteLine(ex);
}
using (Stream s = _wr.GetResponse().GetResponseStream())
{
using (StreamReader sr = new StreamReader(s))
{
var jsonData = sr.ReadToEnd();
Trace.WriteLine("Server response: " + jsonData);
//decode jsonData with javascript serializer
using (StreamWriter file = new StreamWriter(@"D:\WEB\SMS\jsonResponse.txt", true))
{
file.WriteLine("Server response: " + jsonData);
}
}
}
}
Да, ваше решение в порядке. Однако было бы лучше, если бы вы могли назначить порядковый номер для каждого фрагмента, чтобы не было потерянных данных, и вы можете сортировать его в программе приема. – brz
К сожалению, мы отправляем json на стороннюю сторону и нет параметра номера последовательности. (но мы добавляем 1/3 2/3 3/3 в сообщении для пользователя) – user3542112
Либо сторонний API отправит сообщения в том порядке, в котором они получены, и в этом случае вам просто нужно отправить их последовательно без задержка, или в этом случае введение задержки, вероятно, не более надежное, чем просто отправка их последовательно любым способом. –