我现在利用很多的 手持端末 同时访问 WebService这些端末都会把相应的数据信息传给webService ,然后利用WebService生成文件(生成的文件是YYYYMMDDhhmmss+文件名)。在生成文件的时候,我会首先在服务器上判断,这个文件是否存在,如果存在,让文件名名字的地方变为YYYYMMDDhhmmss+1+文件名。尽管是这样,出现冲突的可能性 变得很少了。但是 有很多同时并行访问的时候,可能在一瞬间判断都没生成,结果同时生成了相同的文件。服务器上的文件生成就会冲突。
调试欢乐多
使用数据库中的自增字段。
刚才说明的不足,文件名字是固定的。日期YYYYMMDDhhmmss+文件名guid是什么?
insert into xxx select max(xxx)+1另外,也可以定义静态变量,用锁定的方法防止重名
object obj = "xxxx";
string getfilename() { lock(obj) { return xxx; } }
我对于LOCK那个比较感兴趣,我从网上页查找了下,LOCK是能防止并发操作,当前用户操作完,下个用户才能再进行操作这样的话:是不是不管有多少人同时访问WEbService,只要第一个人的LOCK没有放开,下面的那些人都回等待。对吗?
{
private static object _sysObj = new object();
private static DateTime Time = DateTime.MinValue;
private static int Number;
public static string Preffix
{
get
{
lock (_sysObj)
{
var now = DateTime.Now;
if (Time.Date == now.Date && Time.TimeOfDay.TotalSeconds == now.TimeOfDay.TotalSeconds)
{
Number++;
return Time.ToString("yyyyMMddHHmmss") + "+" + Number.ToString();
}
else
{
Time = now;
Number = 0;
return Time.ToString("yyyyMMddHHmmss");
}
}
}
}
}
用FileName.Preffix就行