C# Wcf服务返回流,但它赢了';关不上
我有一个WCF服务,它打开一个文件,然后将其流返回给客户端。客户端使用stream.CopyTo(…)将流内容保存到文件中,然后关闭返回的流 在这个“下载”步骤之后,我们尝试使用另一个WCF API调用删除服务器上的文件,但我们得到一个“进程无法访问该文件…”。。。因为它正被另一个进程使用。(mscorlib)“异常。几分钟后,此“锁定”消失,文件可以删除C# Wcf服务返回流,但它赢了';关不上,c#,wcf,stream,C#,Wcf,Stream,我有一个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)?