GetRequestStream выдает исключение Тайм-аута случайным образом

После гугления в течение нескольких дней я действительно не могу решить описанную проблему. Надежда здесь найдет решение

Я использую присоединенный код при вызове сервиса WCF на тот же сервер. Я получаю Ошибку из-за тайм-аута случайным образом в вызове WebReq. GetRequestStream ()

Когда я - проверка netstat, я вижу, что соединение остается открытым, так вероятно, есть ли проблема, но я не знаю, как решить его

       //request inicialization
        HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
        WebReq.Method = "POST";
        WebReq.ContentType = "application/json; charset=utf-8";
        WebReq.ContentLength = buffer.Length;

        WebReq.Proxy = null;
        WebReq.KeepAlive = false; //also tried with true
        WebReq.AllowWriteStreamBuffering = false; //also tried with true

        //this produces an error
        using (Stream PostData = WebReq.GetRequestStream())
        {
            PostData.Write(buffer, 0, buffer.Length);
            PostData.Close();
        }

         //open and read response
         HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
         Stream Answer = WebResp.GetResponseStream();
         StreamReader _Answer = new StreamReader(Answer);

         WebResp.Close();

         //return string
         return _Answer.ReadToEnd();

Тайм-аут брошен главным образом приблизительно после 10 секунд времени простоя, но также и приблизительно после пяти запросов в строке. Действительно не может найти шаблон.

Что могло быть неправильным с этим кодом? Есть ли какой-либо другой (лучший) путь к вызову сервиса WCF?

9
задан AnzeR 12 February 2010 в 15:17
поделиться

2 ответа

Я не знаю, что это точно ответственно за проблему, но вы закрываете веб-ответ только если он не выбрасывает исключение, и вы никогда не закрываете поток ответа. Использовать using statements:

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    return reader.ReadToEnd();
}

Это вполне может объяснить проблему, так как если вы оставите ответ открытым, то соединение с веб-сервером останется открытым - что означает, что пул соединений не сможет использовать это соединение.

13
ответ дан 4 December 2019 в 11:04
поделиться

Поскольку это действительно странное поведение, я хотел бы знать, есть ли другие способы вызова службы WCF, размещенной на том же сервере IIS. Я также считаю, что создание TCP-соединения для такого рода вызовов не совсем оптимизировано, и все другие подходы должны быть намного быстрее.

0
ответ дан 4 December 2019 в 11:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: