Вы, вероятно, хотите что-то подобное.Либо проверка длины не удалась, либо BinaryReader выполняет поиск за кулисами.
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url);
WebResponse myResp = myReq.GetResponse();
byte[] b = null;
using( Stream stream = myResp.GetResponseStream() )
using( MemoryStream ms = new MemoryStream() )
{
int count = 0;
do
{
byte[] buf = new byte[1024];
count = stream.Read(buf, 0, 1024);
ms.Write(buf, 0, count);
} while(stream.CanRead && count > 0);
b = ms.ToArray();
}
edit:
Я проверил с помощью отражателя, и это - вызов потока.GetResponseStream возвращает ConnectStream, а свойство Length этого класса выдает исключение, которое вы видели.Как упоминалось в других постерах, вы не можете надежно получить длину ответа HTTP, так что это имеет смысл.