C# 中断上载的文件锁定不';我似乎没有释放

C# 中断上载的文件锁定不';我似乎没有释放,c#,asp.net,silverlight,file-upload,C#,Asp.net,Silverlight,File Upload,我收到“进程无法访问文件“”,因为它正被另一个进程使用。”上载处理程序中出现错误。我们正在测试的是一个通过silverlight的上传程序,它将数据分块发送给服务器上的处理程序。一切正常,直到我们测试中断internet连接,然后重新启用internet连接(当internet重新打开时,上传程序将自动恢复)。当处理程序在internet连接恢复后尝试重新打开文件时,会显示错误(“进程无法访问文件”) 出现问题的代码如下所示 using (FileStream fs = File.Open(co

我收到“进程无法访问文件“”,因为它正被另一个进程使用。”上载处理程序中出现错误。我们正在测试的是一个通过silverlight的上传程序,它将数据分块发送给服务器上的处理程序。一切正常,直到我们测试中断internet连接,然后重新启用internet连接(当internet重新打开时,上传程序将自动恢复)。当处理程序在internet连接恢复后尝试重新打开文件时,会显示错误(“进程无法访问文件”)

出现问题的代码如下所示

using (FileStream fs = File.Open(context.Server.MapPath("~/Uploads/") + uploadGuidAsString, FileMode.CreateNew, FileAccess.Write, FileShare.None))
{

    SaveFile(context.Request.InputStream, fs);
    fs.Flush();

}

TCP套接字只能在数据实际通过连接发送时检测断开的连接。当上传程序的连接断开时,不再从远端发送数据。因为您的服务器没有向上传程序发送任何数据,所以服务器只是等待,期望更多数据最终从上传程序客户端到达


我建议您为每个上载者提供一个唯一的ID。如果您看到上载者再次尝试连接,请手动终止第一个连接。

您需要一个可以唯一标识上载会话的ID和一个允许上载恢复的协议(GUID?)。在重新连接时,上传程序可以发送ID,以及它希望恢复的文件中的偏移量。然后,服务器可以使用该ID查找正在处理该上传的类实例,就像Dark Falcon建议的那样,只需关闭“旧”连接,根据请求移动文件指针,并在新连接上恢复流/分块。我想您需要一些超时来删除服务器上过时的上载会话对象。您的协议可能必须处理此问题-如果在上载会话实例超时并释放后客户端请求恢复,会发生什么情况

Rgds,
Martin

您建议如何关闭旧连接?