流作为WCF中的返回值 - 谁处置它?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

假设我有以下WCF实现:

public Stream Download(string path)
{
    FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read);
    return stream;
}

谁负责处理退货价值?毕竟,网络故障可能发生,因此消费者可能无法处置它。

提问于
用户回答回答于

服务负责关闭流,除非更改默认行为,它会自动执行(具有defalut值的行为始终使用)。如果设置OperationBehavior.AutoDisposeParametersfalse必须为注册的处理程序OperationContext.OperationCompleted和描述的处理处置流在这里

客户端无法关闭流,因为客户端有一个不同的 - 你没有传递引用到你的流或引用你的文件处理程序。内部文件内容被复制到传输并且客户端在它自己的流实例中处理它(他负责处理它)。

用户回答回答于

如果将Stream包含在MessageContract中(因此可以在头文件中发送更多信息),请注意Stream不会自动丢弃!正如OperationBehavior.AutoDisposeParameters属性的名称所示,WCF会自动处理输入/输出参数,因此必须在MessageContract类上实现IDisposable并关闭该流。

扫码关注云+社区