Есть такой простой пример:
interface IClientContract
{
[OperationContract(IsOneWay = true)]
void Send(string message);
}
[ServiceContract(CallbackContract = typeof(IClientContract))]
interface IServerContract
{
[OperationContract(IsOneWay = false)]
int GetRandomValue();
}
class Server : IServerContract
{
public int GetRandomValue()
{
OperationContext.Current.GetCallbackChannel<IClientContract>().Send("Генерация числа");
try { return new Random().Next(); }
finally { OperationContext.Current.GetCallbackChannel<IClientContract>().Send("Генерация числа закончена"); }
}
}
class Client : IClientContract
{
public void Send(string message)
{
Console.WriteLine(message);
}
}
В консольной реализации клиента все отрабатывает на ура!!! А вот стоит клиентскую часть запустить на WinForm или WPF (например при нажатии кнопки, происходит обращение к серверу, который отправляет сообщение, которое нужно отобразить в текстовом поле) происходит зависание. Проблема решается если вызов метода Send производить в отдельном потоке и то иногда начинает висеть клиент.
Подскажите откуда ноги растут
И как это дело можно подправить?