![](/img/trans.png)
[英]Call a callback method on WCF server wihout waiting client must finish
[英]WCF Server-to-Client callback method with return value
我尝试了不同的问题,检查我的个人资料中的其他两个问题,解释了我对这种情况采取的方法遇到的困难。 我会在这里跳过它们。
我只需要一个服务器回调客户端(通过nettcp通道)的示例(C#首选),客户端计算答案,然后返回结果。
(IsOneWay = true)
解决方案不感兴趣,除非我很清楚我对它的含义及其后果非常困惑。 谢谢!
在CodeProject上查看这篇文章 。 这描述了回调的基本示例。 你可能不得不改变几件事:
在回调合同上,操作标记为一种方式 - 这是为了避免由于客户端不良而阻塞服务器(建议的做法)。 但是如果你必须阻止服务器,那么你需要删除一种方法。 请注意,如果您要逐个回调多个客户端,那么您可能必须在不同的线程上回调每个客户端,否则第一个客户端将阻止回调到下一个客户端。
何时调用回调实际上是一个服务器实现。 每当客户端加入(或订阅您的需求)时,给定的示例都会维护一个客户端回调通道列表。 现在,此列表可用于以您想要的任何方式调用回调。 因此,您可以通过简单地遍历列表来调用计时器上的回调。 请注意,您必须确保对列表的线程安全访问。
如果客户端必须在回调中返回一些结果,则不能再使用OneWay。
如前所述,订阅仅意味着添加到列表(示例中为加入方),取消订阅意味着从列表中删除(离开方)。
编辑 :
我从看到的示例中获取了源代码,并将其修改如下:
在回调契约中添加了一个方法Echo
:
public interface IBeerInventoryCallback
{
...
[OperationContract]
string Echo(string message);
}
当某人离开聚会并在控制台上打印来自客户端的响应时,从服务中调用Echo。 它没有任何问题。
请注意,此示例使用VS生成的客户端代理,该代理继承自System.ServiceModel.DuplexClientBase<T>
,这使客户端代码更加简单。 也许,你应该尝试一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.