У меня есть необходимость передавать большие потоки данных из веб-службы. Вместо того, чтобы увеличивать размер буфера IIS в метабазе, я хотел бы закачать байты непосредственно в небуферизованный Response.OutputStream.
Response.ClearHeaders();
Response.Clear();
Response.ContentType = "text/xml";
Response.Buffer = false;
int len = GetReport(protocolName, sourceName, reportName, pageIndex, pageSize, Response.OutputStream);
Response.End();
Это работает нормально, но я могу знать только, сколько байт было извлечено после их получения, поэтому я не могу установить заголовок ContentLength. Следующая строка выдает исключение (невозможно добавить заголовки после начала возврата содержимого):
int len = GetReport(protocolName, sourceName, reportName, pageIndex, pageSize, Response.OutputStream);
Response.AddHeader("Content-Length", len.ToString()); // can't do this
Вопрос: Полагаю, вариантов на самом деле не так много. Я предполагаю, что единственный способ справиться с этим - ввести промежуточный поток, например, поток памяти, получить длину потока, установить заголовок, а затем накачать этот поток в поток Response.Output. Есть другие идеи? '