Сервисный контракт:
[ServiceContract(CallbackContract = typeof(IClientCallBackChannel),
SessionMode = SessionMode.Required)]
public interface IServerService
{
[OperationContract(IsOneWay = true)]
void foo();
}
Клиентский договор:
public interface IClientCallBackChannel
{
[OperationContract(IsOneWay = false)]
object DoCommand(Command command);
}
class ClientCallBackChannelImpl
{
public object DoCommand(Command command)
{
// freezes service
serverService.foo();
// OK
new Action(() =>
{
Thread.Sleep(1000);
serverService.foo();
}
).BeginInvoke(null,null);
}
}
У меня есть дуплексный сервис, и когда я вызываю клиентский метод DoCommand, внутри которого происходит вызов метода Service foo, мой сервис зависает.
Если я вызываю foo асинхронно, он работает нормально, но мне нужно, чтобы вызов был синхронным.