Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Wcf服务返回流,但它赢了';关不上_C#_Wcf_Stream - Fatal编程技术网

C# Wcf服务返回流,但它赢了';关不上

C# Wcf服务返回流,但它赢了';关不上,c#,wcf,stream,C#,Wcf,Stream,我有一个WCF服务,它打开一个文件,然后将其流返回给客户端。客户端使用stream.CopyTo(…)将流内容保存到文件中,然后关闭返回的流 在这个“下载”步骤之后,我们尝试使用另一个WCF API调用删除服务器上的文件,但我们得到一个“进程无法访问该文件…”。。。因为它正被另一个进程使用。(mscorlib)“异常。几分钟后,此“锁定”消失,文件可以删除 如果客户端流关闭()情不自禁,我应该怎么做才能让服务器释放流并让文件删除?客户端收到的流与服务器打开并传递给客户端的流不同。只需想象一个客户

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

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


如果客户端流关闭()情不自禁,我应该怎么做才能让服务器释放流并让文件删除?

客户端收到的流与服务器打开并传递给客户端的流不同。只需想象一个客户端工作站和一个服务器,由internet隔开:如果流发送给客户端,客户端就没有操作系统处理服务器硬盘上的物理流。因此,关闭客户端接收的流不会释放服务器端的流

几分钟后,文件可能会被删除,这可能是因为服务器实例或会话被释放,从而释放了流

换言之:发送后关闭(处置)服务器上的流。

根据需要,您可以在操作完成后处置返回值

这样做:

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;
}

我希望客户端关闭将向wcf服务返回有关此操作的“消息”:(问题:为什么需要它:if(fileStream!=null)?