【问题标题】:Should I dispose the streams in Owin's context when I use them?当我使用它们时,我应该在 Owin 的上下文中处理流吗?
【发布时间】:2015-11-06 13:52:39
【问题描述】:

我正在使用 WebApp.Start() 为一个非常简单的自托管端点编写 Owin 中间件;

要写入响应流,我有以下形式的代码:

var writer = new StreamWriter(context.Response.Body, Encoding.UTF8);
serialiser.Serialize(writer, output);
writer.Flush();

我应该处置作者还是context.Response.Body?通常我到处都有using 语句,但我没有实例化响应流,而且我模糊记得有一个约定,即处置是实例化 IDisposable 的组件的责任。

【问题讨论】:

    标签: owin katana


    【解决方案1】:

    不,服务器拥有这些流,并将在请求结束时清理它们。

    http://owin.org/html/spec/owin-1.0.html

    3.4 “应用程序不应该关闭或释放给定的流,除非它完全消耗了请求正文。一旦应用程序委托的任务完成,流所有者(例如服务器或中间件)必须进行任何必要的清理。”

    3.5 “应用程序不应关闭或处置给定的流,因为中间件可能会附加其他数据。一旦应用程序委托的任务完成,流所有者(例如服务器或中间件)必须执行任何必要的清理。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多