Мы используем PushStreamContent для потоковой передачи некоторых больших кусков с установленными заголовками Content-Disposition и т.п.Как обнаружили многие люди, недостаток состоит в том, что происходит, когда что-то идет не так в потоковой передаче?
По крайней мере, мы пытались зарегистрировать ошибку на нашей стороне, чтобы кто-то мог ее исправить.
Недавно я столкнулся со странной ситуацией.Помещение try / catch для функции потоковой передачи работало достаточно хорошо для ошибок, возникших до того, как вы фактически начали потоковую передачу (т. Е. Ошибки в SQL-запросах и т. П.), Но если ошибка произошла позже (как в сериализации), блок catch неогонь.
Кто-нибудь мог бы понять, почему это так?
Например,
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
try
{
response.Content = new PushStreamContent((stream, content, context) =>
{
using (XmlWriter rWriter = PrepForXmlOutput(stream))
{
rpt.GenerateXmlReport(rWriter, reportParams, true);
}
}, "EventReport", extension);
}
catch (Exception e)
{
// The first step of GenerateXmlReport() is to run the sql;
// if the error happens there, this fires and will log the exception
// if the error happens later, during the result serialization, this does NOT fire
Log.Error(e);
}
return response;