PushStreamContent и исключения в середине потоковой передачи / сериализации - PullRequest
0 голосов
/ 08 декабря 2018

Мы используем 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;

1 Ответ

0 голосов
/ 08 декабря 2018

Ненавижу, когда вижу ответ сразу после того, как нажму "Пост".

Попробуйте / поймайте вокруг внешних обложек, пока я не верну сообщение HttpResponseMessage.Когда / где я получаю исключение, зависит от того, как далеко заходит внутренний метод до того, как произойдет возврат.

Try / catch должен был быть во внутреннем вызове (тот, где происходит вся работа), чтобы охватить весьЖизненный цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...