Так вот в чем дело. Я создал обработчик из нескольких частей (вам нужно реализовать RFC для потоковой передачи контента, скажем, на iPhone или Adobe Reader). Предполагается, что спецификация позволяет обрабатывать файл, когда клиент запрашивает диапазон байтов вместо всего массива. Проблема с моим обработчиком возникла, когда клиенту потребовался весь BLOB:
if (context.Request.Headers[HEADER_RANGE] != null)
{
...
}
else
{
context.Response.ContentType = contentItem.MimeType;
addHeader(context.Response, HEADER_CONTENT_DISPOSITION, "attachment; filename=\"" + contentItem.Filename + "\"");
addHeader(context.Response, HEADER_CONTENT_LENGTH, contentItem.FileBytes.Length.ToString());
context.Response.OutputStream.Write(contentItem.FileBytes, 0, contentItem.FileBytes.Length);
}
Обратите внимание, что ничего не хватает ???
Я забыл включить:
context.Response.Flush();
После добавления этой строки кода он начал работать в производственной среде. Однако мне кажется странным, что это работало на сервере, а не на клиентах. Кто-нибудь может пролить свет на то, почему это будет?