在每次从WCF服务调用函数时,在客户端,它等待直到WCF服务上的函数完成,就像调用本地函数一样.所以我为每个在新线程中启动预期函数的函数添加了一个额外的函数,所以我的几乎所有函数都是这样的:
EX:
我从CLIENT端调用一个函数client.ReceiveFile():
private void SendFile(Socket socket,Job job,DoWorkEventArgs e) { UpdateInfo(job.Name,job.Icon,job.Size); client.ReceiveFile((_File)job.Argument,bufferSize); SizeAll = job.Size; UpdateCurrFile(((_File)job.Argument).Path,"1"); SendX(socket,((_File)job.Argument).Path,e); }
在服务器中我必须这样做:
public void ReceiveFile(_File file,int bufferSize) { System.Threading.Thread th = new System.Threading.Thread(unused => ReceiveFileTh(client,file.Name,file.Size,bufferSize)); th.Start(); } private void ReceiveFileTh(Socket client,string destPath,long size,int bufferSize) { try { ReceiveX(client,destPath,size,bufferSize); } finally { CloseClient(); } }
关键是,当我从客户端sendFile时,它告诉服务开始接收,但如果我没有启动新线程,客户端将等待服务接收文件,并且不会发送文件数据.
解决方法
您正在寻找的是[OperationContract(IsOneWay = true)],有关详细信息,请参阅
http://msdn.microsoft.com/en-us/magazine/cc163537.aspx