1

我正在使用HttpWebRequest. 但有时消息似乎发送了两倍、三倍甚至更多,审查所有过程似乎还可以。

我认为唯一的事情是 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 回答