WCF服务返回流,但不会关闭

Zol*_*yak 4 c# wcf stream

我有一个WCF服务,它将打开一个文件,然后将其流返回给客户端。客户端使用stream将流内容保存到文件中。CopyTo(...)然后关闭返回的流。

完成此“下载”步骤之后,我们尝试使用另一个WCF API调用删除服务器上的文件,但是我们得到一个“进程无法访问该文件...,因为该文件正在被另一个进程使用。(mscorlib)”异常。几分钟后,此“锁”消失,可以删除该文件。

如果客户端流Close()无法解决问题,我该怎么办才能使服务器释放流并让文件删除?

chr*_*oph 5

根据本文,您可以在操作完成后处理返回值。

做这样的事情:

public Stream GetFile(string path) 
{
    Stream fileStream = null;    

    try   
    {
        fileStream = File.OpenRead(path);
    }
    catch(Exception)
    {
        return null;
    }

    OperationContext clientContext = OperationContext.Current;
    clientContext.OperationCompleted += new EventHandler(delegate(object sender, EventArgs args)
    {
        if (fileStream != null)
            fileStream.Dispose();
    });

    return fileStream;
}
Run Code Online (Sandbox Code Playgroud)