Webservice (iisexpress)保持文件打开
本文关键字:文件 iisexpress Webservice | 更新日期: 2023-09-27 17:49:20
我需要创建一个sema4文件,限制其他会话尝试打开/写入数据库,如果另一个会话已经尝试做相同的'事务',在这种情况下,做一个类似的预订,已经'正在进行'。
代码如下:
HttpSessionState ss = HttpContext.Current.Session;
string sessionID = ss.SessionID;
DirectoryInfo di = new DirectoryInfo(dataDirectory + "Semaphores");
string facilityIDExt = requestedFacilityID.ToString().PadLeft(3, '0');
string sema4File = string.Format("{0}.{1:yyyyMMdd}.{2}", sessionID, RequestedStartDT, facilityIDExt);
sema4FilePath = Path.Combine(di.FullName, sema4File);
File.Create(sema4FilePath);
FileInfo[] fiPaths = di.GetFiles(string.Format("*.{0}", facilityIDExt));
bool bookingInProgress = true;
int waitPeriod = 60;
while (waitPeriod > 0 && bookingInProgress)
{
fiPaths = di.GetFiles(string.Format("*.{0}", facilityIDExt));
bookingInProgress = false;
foreach (FileInfo item in fiPaths)
if (item.Name.Contains(string.Format("{0:yyyyMMdd}.{1}", RequestedStartDT, facilityIDExt)) && item.Name != sema4File)
{
if (item.LastWriteTime > DateTime.Now.AddMinutes(-1))
{
bookingInProgress = true;
break;
}
}
System.Threading.Thread.Sleep(5000);
waitPeriod = waitPeriod - 5;
}
这个想法是,实际的预订将在数据库中记录不到60秒,但在此期间,不允许其他预订请求。
我遇到的问题是,当我调用以下代码时:
if (File.Exists(sema4FilePath))
File.Delete(sema4FilePath);
iisexpress不会删除文件,因为它正在使用中。iisexpress正在使用
我想这也会发生在iis上。
我不明白为什么iisexpress保持sema4文件打开?
当我想删除sema4文件时,我如何解决"使用中"问题?
当你这样做的时候:
File.Create(sema4FilePath);
返回一个FileStream。你应该关上它,释放它。最好用using:
using (var stream = File.Create(sema4FilePath)) {
// Do you stuff
}
或者不使用内容直接关闭:
File.Create(sema4FilePath).Close();