1

を使用して SMS を送信していHttpWebRequestます。ただし、メッセージが 2 回、3 回、またはそれ以上送信されて、すべてのプロセスが問題ないように見える場合があります。

私が思う唯一のことは、HttpWebRequest が非同期で動作していることです。

ここに私のコードがあります、

    public bool sendSmsGateway(string tcDestino, string tcMensaje, string tcTitulo = "")
    {
        bool lReturn = false;
        string contenido = HttpUtility.UrlEncode(tcMensaje);
        string lcTitulo = "SMS Sender";
        if (!String.IsNullOrEmpty(tcTitulo))
        {
            lcTitulo = tcTitulo;
        }
        lcTitulo = HttpUtility.UrlEncode(lcTitulo);
        string fechaEnvio = DateTime.Now.ToString("s"); 
        string url = string.Format(StrSMSGatewayURL, StrSMSGatewayUsuario, StrSMSGatewayPassword, tcDestino, contenido, lcTitulo, fechaEnvio);
        HttpWebRequest enviar = (HttpWebRequest)WebRequest.Create(url);
        string respuesta = new StreamReader(enviar.GetResponse().GetResponseStream()).ReadToEnd();

        StrSMSGatewayRespuesta = respuesta.Trim();
        if (StrSMSGatewayRespuesta  == StrSMSGatewayRespuestaOk.Trim())
        {
            lReturn = true;
        }
        return lReturn;
    }

このコードは、次の場合にメッセージを送信し、送信済みとしてマークするループ ルーチンで実行されます。

string respuesta = new StreamReader(enviar.GetResponse().GetResponseStream()).ReadToEnd();

適切なコードを返します。

(httpWebRequest send the message and get the response)私の質問は..プロセスを停止する方法、または コードを強制的に待機させる方法があります。(timeout succeed)

4

1 に答える 1

1

HttpWebRequest.GetResponse()は同期呼び出しであるため、現在のスレッドをブロックするための別のメカニズムを用意する必要はありません。非同期メソッドを使用していた場合はHttpWebRequest.BeginGetResponse()、応答が非同期で受信されるまで待機する別のメカニズムが必要になります。

複数の SMS メッセージを送信している場合は、StrSMSGatewayRespuesta. 間違ったコードを取得してもメッセージが実際に送信された場合、未送信としてマークしているため、メッセージは再送信される可能性があります。

于 2012-05-23T22:04:13.493 に答える