Как игнорировать данные отклика при отправке почтового запроса? - PullRequest
0 голосов
/ 15 марта 2012

Отправляю запрос на отправку по следующему коду:

try
            {
                string responseContent;
                request = (HttpWebRequest)WebRequest.Create(url);
                request.CookieContainer = cookieContainer;
                // Set Method to "POST"
                request.Method = "POST";
                // Set the content type of the WebRequest
                request.ContentType = "application/x-www-form-urlencoded";
                request.Proxy = GlobalProxySelection.GetEmptyWebProxy();
                request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3";
                // Set the content length
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] byteArray = encoding.GetBytes(requestCommand);
                request.ContentLength = byteArray.Length;
                // Get the request stream
                using (Stream requestStream = request.GetRequestStream())
                {
                    // Write the "POST" data to the stream
                    requestStream.Write(byteArray, 0, byteArray.Length);
                }
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        using (BufferedStream buffer = new BufferedStream(responseStream))
                        {
                            using (StreamReader reader = new StreamReader(buffer))
                            {
                                responseContent = reader.ReadToEnd();
                            }
                        }
                    }
                }
                return responseContent;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
}

Все работает хорошо. Но строки кода ниже очень медленные.

using (StreamReader reader = new StreamReader(buffer))
{
   responseContent = reader.ReadToEnd();
}

Не знаю почему! Я потратил больше времени, чтобы найти решение, например при set proxy = null, ... но безрезультатно. Есть ли способ игнорировать эту строку. Мне не нужно получать ответные данные. Я попытался заменить эти строки на:

using (Stream responseStream = response.GetResponseStream())
{
   responseStream.Flush();
   responseStream.Close();
}

Но я не могу отправить запрос правильно и успешно. Пожалуйста, помогите мне. Большое спасибо!

1 Ответ

0 голосов
/ 15 марта 2012

Если вас не волнует ответ или его отказ, вы, вероятно, можете поставить в очередь ответ в новом потоке и просто проигнорировать его.

using (Stream requestStream = request.GetRequestStream())
{
    // Write the "POST" data to the stream
    requestStream.Write(byteArray, 0, byteArray.Length);
}

// now put the get response code in a new thread and immediately return
ThreadPool.QueueUserWorkItem((x) =>
{
    using (var objResponse = (HttpWebResponse) request.GetResponse())
    {
        responseStream = new MemoryStream();
        objResponse.GetResponseStream().CopyTo(responseStream);
        responseStream.Seek(0, SeekOrigin.Begin);
     }
});
...