2011-01-05 2 views
1

Я пытаюсь отправить двоичные данные клиенту с помощью Response.OutputStream, но, похоже, с ним возникают проблемы. Мой код довольно прост и почти идентичен рабочему коду, который я использовал раньше, но ничего не происходит на клиенте при запуске кода.Проблемы с ASP.NET Response.OutputStream

Response.Buffer = false; 
Response.ContentType = @"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
Response.AppendHeader("content-length", genstream.Length.ToString()); 
Response.AppendHeader("content-disposition", string.Format("attachment; filename={0}.xlsx", filename)); 

byte[] buffer = new byte[1024]; 
genstream.Position = 0; 

int n; 
while ((n = genstream.Read(buffer, 0, 1024)) > 0) 
{ 
    Response.OutputStream.Write(buffer, 0, n); 
} 

Если есть код, который, как представляется, может быть причиной этого поведения?

+1

Опишите неправильное поведение, которое вы видите: текст сообщения об ошибке и т. Д. И прочитайте http://tinyurl.com/so-hints, чтобы помочь вам написать вопросы, на которые можно ответить. – Richard

+0

Неправильное поведение заключается в том, что в браузере не происходит ничего наблюдаемого, когда код выполняется на сервере. НАПРИМЕР. Код запускается, когда клиент нажимает на ссылку, но при запуске кода ничего не происходит. – sqwerty

+1

Что показывает Fiddler, отправляются ли заголовки клиенту, и есть ли какое-нибудь тело? –

ответ

2

Используйте функцию ответа BinaryWrite и команду Flush. Например:

Response.ContentType = @"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
Response.BinaryWrite(buffer); 
Response.Flush(); 
+0

Все равно никаких изменений. Кажется, что это не проблема с примером кода, который я вставил, поскольку я использовал по существу тот же самый код, прежде чем без проблем. Я предполагаю, что есть некоторые настройки среды, которые вызывают поведение, но понятия не имеют. – sqwerty

+0

Добавить Response.End()? –

Смежные вопросы