题目可能起的不对,具体意思见我下面详细描述吧:
现在我要用Silverlight+wcf上传文件,由于wcf的宿主是IIS,所以wcf服务只暴露了异步调用接口,
上传文件的思路是将文件读入客户端的内存,然后调用异步接口循环读取字节流,这时候问题出现了:
因为是异步的,所以循环的时候他不会自动去阻塞写文件的线程,比如说一个文件是10240个字节,每次我读1024个字节到数组,这时候要循环十次才能把文件写入到服务器,但是这十次并不是想象中的队列方式执行,而是几乎同时运行的,这个时候就可能因为硬盘性能跟不上,第二步没写完数据,第三步就开始写数据了,例如下面这段代码:
1 using (System.IO.FileStream fs = new System.IO.FileStream(uploadFolder + @"\" + fileName, fileMode, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite))
2 {
3 fs.Write(fileContext, 0, fileContext.Length);
4 }
这个时候new System.IO.FileStream()内就会报 文件“G:\WORK\WCF\WCF Solution1\SilverlightApplication1.Web\upload\测试文件上传.EXE”正由另一进程使用,因此该进程无法访问此文件。
我想问一下,这个问题该怎么解决。谢谢大家
最直接的方法就是用进程间的互斥锁,两进程互相协调。