在客户端,每次我从 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();
}
}
关键是,当我从客户端发送文件时,它告诉服务开始接收,但如果我没有启动新线程,客户端将等待服务接收文件,并且不会发送文件数据。
WCF 是否支持一种不让客户端等待服务功能完成的方式!或者我将不得不使用上述方法?