检查
this article
在代码项目上。这描述了回调的基本示例。你可能需要改变的事情很少:
-
在回调契约中,标记为单向的操作——这是为了避免由于客户机不好而阻塞服务器(推荐的做法)。但是,如果必须阻止服务器,则需要删除一种方法。请注意,如果要逐个回调多个客户机,则可能需要在不同的线程上回调每个客户机,否则,第一个客户机将阻止对下一个客户机的回调。
-
何时调用回调实际上是一种服务器实现。给定的示例维护一个每当客户端加入(或订阅您的需求)时的客户端回调通道列表。现在这个列表可以用任何方式调用回调。因此,您可以通过简单地遍历列表来调用计时器上的回调。请注意,您必须确保对列表的线程安全访问。
-
如果客户端必须在回调中返回某些结果,则不能再次使用单向。
-
如前所述,订阅意味着简单地添加到列表中(示例中的join party),取消订阅意味着从列表中删除(leave party)。
编辑
:
我已经从
example
修改如下:
增加一种方法
Echo
在回拨合同中:
public interface IBeerInventoryCallback
{
...
[OperationContract]
string Echo(string message);
}
当有人离开参与方并在控制台上打印来自客户机的响应时,调用了来自服务的echo。没有任何问题也能奏效。
请注意,此示例使用继承自的vs生成的客户端代理
System.ServiceModel.DuplexClientBase<T>
这使得客户端代码更简单。也许,你应该试试。