Использование .NET 4.0, IIS 7.5 (Windows Server 2008 R2). Я хотел бы передать двоичный контент размером около 10 МБ. Содержимое уже находится в MemoryStream. Интересно, автоматически ли IIS7 разбивает выходной поток на куски. От клиента, получающего поток, есть ли разница между этими двумя подходами:
//#1: Output the entire stream in 1 single chunks
Response.OutputStream.Write(memoryStr.ToArray(), 0, (int) memoryStr.Length);
Response.Flush();
//#2: Output by 4K chunks
byte[] buffer = new byte[4096];
int byteReadCount;
while ((byteReadCount = memoryStr.Read(buffer, 0, buffer.Length)) > 0)
{
Response.OutputStream.Write(buffer, 0, byteReadCount);
Response.Flush();
}
Заранее благодарю за любую помощь.
Я не пробовал ваше второе предложение, передавая исходный поток данных. Поток памяти действительно был заполнен из потока ответа веб-запроса. Вот код,
HttpWebRequest webreq = (HttpWebRequest) WebRequest.Create(this._targetUri);
using (HttpWebResponse httpResponse = (HttpWebResponse)webreq.GetResponse())
{
using (Stream responseStream = httpResponse.GetResponseStream())
{
byte[] buffer = new byte[4096];
int byteReadCount = 0;
MemoryStream memoryStr = new MemoryStream(4096);
while ((byteReadCount = responseStream.Read(buffer, 0, buffer.Length)) > 0)
{
memoryStr.Write(buffer, 0, byteReadCount);
}
// ... etc ... //
}
}
Как вы думаете, может ли он безопасно передать responseStream в Response.OutputStream.Write()? Если да, можете ли вы предложить экономичный способ сделать это? Как отправить ByteArray + точную длину потока в Response.OutputStream.Write()?