После гугления в течение нескольких дней я действительно не могу решить описанную проблему. Надежда здесь найдет решение
Я использую присоединенный код при вызове сервиса 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?
Я не знаю, что это точно ответственно за проблему, но вы закрываете веб-ответ только если он не выбрасывает исключение, и вы никогда не закрываете поток ответа. Использовать using
statements:
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
Это вполне может объяснить проблему, так как если вы оставите ответ открытым, то соединение с веб-сервером останется открытым - что означает, что пул соединений не сможет использовать это соединение.
Поскольку это действительно странное поведение, я хотел бы знать, есть ли другие способы вызова службы WCF, размещенной на том же сервере IIS. Я также считаю, что создание TCP-соединения для такого рода вызовов не совсем оптимизировано, и все другие подходы должны быть намного быстрее.