服务合同:
[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”时,在该方法内部调用了一个服务方法 foo,我的服务冻结了。如果我异步调用 foo 它工作正常,但我需要调用是同步的。