На стороне клиента каждый раз, когда я вызываю функцию из моей службы WCF, она ждет, пока функция не будет завершена в службе WCF, например, вызовет локальную функцию. Поэтому я добавил дополнительную функцию для каждого из них, которая начинается намеченную функцию в новом потоке, так что почти все мои функции, как это:WCF вызывает функцию, не дожидаясь завершения ее работы?
EX:
вызвать функцию из КЛИЕНТА стороне 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();
}
}
Дело в том, когда I sendFile от клиента, он сообщает службе начать получать, но если я не запустил новый поток, клиент будет ждать, пока служба получит этот файл, и не отправит данные файла.
Так что WCF поддерживает способ, который не заставит клиента ждать выполнения служебной функции! или мне придется использовать вышеуказанный метод?
Да. Это правда. По умолчанию этот параметр является ложным, поэтому клиент будет ждать, пока функция будет выполнена. Если для него установлено значение true, это означает, что функция ничего не возвращает, и клиент не будет ждать ответа. – sleepwalker
Извините, я забыл обновить услугу =), это сработало –