WebRequest GetResponse не отвечает, время ожидания истекло - PullRequest
1 голос
/ 09 августа 2011

Я пытаюсь создать запрос HttpWebRequest для отправки данных через POST в веб-службу REST, а затем добавить дополнительный запрос HttpWebRequest для загрузки ответа после обработки.

POST отправляет двоичные данные в веб-службу следующим образом:

HttpWebRequest uploadRequest = (HttpWebRequest)WebRequest.Create(baseAddress + uploadURIRequest);
uploadRequest.Timeout = Timeout.Infinite;
uploadRequest.ReadWriteTimeout = Timeout.Infinite;
uploadRequest.Method = "POST";
uploadRequest.ContentLength = fileInfo.Length;
uploadRequest.ContentType = "application/octet-stream";

using (Stream writeStream = uploadRequest.GetRequestStream())
{
    using (FileStream readStream = new FileStream(fileStreamFileName, FileMode.Open, FileAccess.Read))
    {
        byte[] data= new byte[readStream.Length];
        int bytesRead = readStream.Read(data, 0, (int)readStream.Length);
        writeStream.Write(data, 0, bytesRead);

        readStream.Close();
    }
    writeStream.Close();
}

Затем делается следующий запрос, чтобы сообщить веб-службе обработать данные на сервере и вернуть ответ о состоянии.

HttpWebRequest processRequest = (HttpWebRequest)WebRequest.Create(baseAddress + processURIRequest);
processRequest.Timeout = 10000;
processRequest.ReadWriteTimeout = 10000;
processRequest.ContentType = "GET";

HttpWebResponse processRequestResponse = (HttpWebResponse)processRequest.GetResponse();

using (Stream processRequestResponseStream = processRequestResponse.GetResponseStream())
{
    //Do stuff...

}

Когда я меняю тип контента, он работает для данных XML. Однако, когда я сохраняю его, как показано выше, с двоичными данными, операция всегда прерывается ... даже если я увеличиваю время ожидания более 10 секунд. Обработка, которую он выполняет, не должна занять много времени, чтобы вернуться.

Когда я отлаживаю, он всегда висит на строке с GetResponse:

HttpWebResponse processRequestResponse = (HttpWebResponse)processRequest.GetResponse();

1 Ответ

1 голос
/ 10 августа 2011

Добавление

HttpWebResponse uploadRequestResponse = (HttpWebResponse)uploadRequest.GetResponse();

после записи в поток решил эту проблему.

...