从客户端的回调方法调用服务

时间:2009-11-23 09:34:28

标签: wcf client callback nested

我有一个场景,当客户端收到其中一个回调方法的命令时,客户端需要调用另一个服务。 例如: 在OnNewCommand()中,回调方法客户端收到消息X.现在客户端必须调用服务器中定义的Service1()。注意,客户已注册到Service1()的回调。我不能使用相同的客户端对象来调用Service1(),因为它会导致死锁。所以我使用一个新的客户端对象来调用Service1()。但它会挂起,直到超时期限到期。 知道怎么解决吗? 感谢

5 个答案:

答案 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)

离开我的头顶,需要检查几件事情:

  • 如果您正在使用HTTP,请将HTTP connections allowed的数量从客户端增加到HTTP服务器。默认情况下为2,可能不足以满足您的需求。
  • 确保WCF服务中的throttling options足以处理所有必需的连接。

答案 4 :(得分:0)

可能您的服务没有设置ConcurencyMode的行为。

查看[ServiceBehavior(ConcurencyMode=ConcurencyMode.Reentrant)]之类的内容 或类似的属性(如CallbackBehavior)