На стороне клиента каждый раз, когда я вызываю функцию из моей службы 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 способ, при котором клиент не будет ждать выполнения сервисной функции! или мне придется использовать вышеуказанный метод?