首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >流作为WCF中的返回值-谁处理它?

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

Stack Overflow用户
提问于 2011-06-26 18:08:27
回答 3查看 9K关注 0票数 53

假设我有以下WCF实现:

代码语言:javascript
复制
public Stream Download(string path)
{
    FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read);
    return stream;
}

谁负责处理返回值?毕竟,网络故障可能会发生,因此消费者可能无法处理它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-26 19:02:04

服务负责关闭流,除非您更改默认行为it does it automatically (始终使用带Defalut值的行为)。如果将OperationBehavior.AutoDisposeParameters设置为false,则必须为OperationContext.OperationCompleted注册处理程序,并按照here所述在处理程序中处理流。

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

票数 49
EN

Stack Overflow用户

发布于 2011-10-20 05:58:04

如果您将流包装在MessageContract中(这样您就可以在报头中发送更多信息),请注意流不会被自动处理!正如attribute OperationBehavior.AutoDisposeParameters的名称所暗示的那样,WCF会自动处理输入/输出参数,因此您必须在MessageContract类上实现IDisposable并关闭那里的流。

票数 34
EN

Stack Overflow用户

发布于 2014-11-16 16:51:10

您可以在WCF中处理返回的流,如下所示

代码语言:javascript
复制
FileStream stream=null;
OperationContext clientContext = OperationContext.Current;
clientContext.OperationCompleted += (sender, args) =>
{
    if (stream != null)
        stream.Dispose();
};

stream = new FileStream(path, FileMode.Open, FileAccess.Read);
return stream;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6483320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档