2014-10-27 3 views
0

Мы хотим разделить сообщения на несколько (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); 
         } 
       } 
     } 
} 
+0

Да, ваше решение в порядке. Однако было бы лучше, если бы вы могли назначить порядковый номер для каждого фрагмента, чтобы не было потерянных данных, и вы можете сортировать его в программе приема. – brz

+0

К сожалению, мы отправляем json на стороннюю сторону и нет параметра номера последовательности. (но мы добавляем 1/3 2/3 3/3 в сообщении для пользователя) – user3542112

+0

Либо сторонний API отправит сообщения в том порядке, в котором они получены, и в этом случае вам просто нужно отправить их последовательно без задержка, или в этом случае введение задержки, вероятно, не более надежное, чем просто отправка их последовательно любым способом. –

ответ

0

Я бы лучше проверить документацию вашего SMS Sender API, как это может быть написано, что они не гарантируют порядок смс сообщений - они могут иметь внутренние очередь и ответ от сервера могут означать, что они заключили в очередь messege, а не то, что они доставили его. В этом случае добавление задержки 3, 5 или даже 10 секунд не поможет.

+0

Его также поставщик. Очень может случиться, что все в порядке до тех пор, пока оно не достигнет «последнего прыжка», а затем «перестроено» там => вы НИКОГДА не можете гарантировать заказ SMS (в разумный короткий промежуток времени) ... – ChrFin

+0

Да, я согласен: если вы полагаетесь на некоторую 3d-вечеринку, которая доставляет сообщения, вы не можете быть уверены в том, как это делается. – ZuoLi

+0

И если у вас нет собственной телефонной сети, это невозможно сделать без: -) ... – ChrFin