1
服務合同:WCF雙工服務回撥電話凍結
[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,它工作正常,但我需要調用是同步的。
我嘗試將我的ServiceBehavior的併發模式設置爲多個,但仍然阻塞。 – jacob
都在你的服務和客戶端?奇怪 - 無論如何,如果你想在另一箇中調用一個,只能嘗試重構成OneWay方法。 – Carsten
還有一件事:我只看到一半你的代碼 - 確保你不再在foo內調用DoCommand - 也許你在這裏得到了一些無限循環... – Carsten