流/序列化过程中的PushStreamContent和异常

时间:2018-12-07 21:29:19

标签: asp.net-web-api

我们正在使用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 :(得分:0)

在我点击“发布”后看到答案时就讨厌它。

尝试/抓住外面的所有内容,直到我返回HttpResponseMessage。我何时/何处获得异常取决于内部方法在返回之前发生的距离。

try / catch必须在内部调用(所有工作都发生在其中)上,以覆盖整个生命周期。