我们正在使用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;
答案 0 :(得分:0)
在我点击“发布”后看到答案时就讨厌它。
尝试/抓住外面的所有内容,直到我返回HttpResponseMessage。我何时/何处获得异常取决于内部方法在返回之前发生的距离。
try / catch必须在内部调用(所有工作都发生在其中)上,以覆盖整个生命周期。