我有一个场景,当客户端收到其中一个回调方法的命令时,客户端需要调用另一个服务。 例如: 在OnNewCommand()中,回调方法客户端收到消息X.现在客户端必须调用服务器中定义的Service1()。注意,客户已注册到Service1()的回调。我不能使用相同的客户端对象来调用Service1(),因为它会导致死锁。所以我使用一个新的客户端对象来调用Service1()。但它会挂起,直到超时期限到期。 知道怎么解决吗? 感谢
答案 0 :(得分:5)
我遇到了同样的问题(回调挂起直到超时)。 我通过在实现回调接口的对象上设置属性来解决这个问题:
[CallbackBehavior(UseSynchronizationContext = false)]
答案 1 :(得分:2)
你可能陷入僵局......
如果可能的话,将您的回调方法定义为“OneWay”和/或对它们进行无阻塞调用,例如: “begin_m1(...)”
同时检查您在客户端和服务器上使用的ConcurrencyMode,看看是否可以使用ConcurrencyMode.Reentrant或ConcurrencyMode.Muliple
有关此
的详细讨论,请参阅Programming WCF services的第5章答案 2 :(得分:1)
这里的问题相同。不得不添加
[CallbackBehavior(ConcurrencyMode=ConcurrencyMode.Reentrant, UseSynchronizationContext=false)]
在我的回调课程上方。
答案 3 :(得分:0)
离开我的头顶,需要检查几件事情:
答案 4 :(得分:0)
可能您的服务没有设置ConcurencyMode的行为。
查看[ServiceBehavior(ConcurencyMode=ConcurencyMode.Reentrant)]
之类的内容
或类似的属性(如CallbackBehavior)