我有一个WCF服务,它打开一个文件,然后将其流返回给客户端。客户端使用stream.CopyTo(...)将流内容保存到文件中,然后关闭返回的流。
此后'下载'步骤我们尝试使用另一个WCF API调用删除服务器上的文件,但我们得到一个'进程无法访问该文件...因为它正在被另一个进程使用。 (mscorlib程序)"例外。几分钟后,这个"锁定"消失,文件可以删除。
如果客户端流Close()无法帮助,我该怎么办才能让服务器释放流并让文件删除?
答案 0 :(得分:5)
答案 1 :(得分:0)
客户端收到的流不与服务器打开并传递给客户端的流相同。只需绘制一个客户端工作站和一个服务器,由互联网分隔:如果将流发送到客户端,则客户端不会保留服务器硬盘上物理流的操作系统句柄。因此,关闭客户端收到的流不会在服务器端释放流。
几分钟后文件可以被删除的事实可能是因为服务器实例或会话已经处理掉了,也释放了流。
换句话说:发送后关闭(处理)服务器上的流。