我尝试了不同的问题,检查我的个人资料中的另外两个问题,解释了我对这种情况采取的方法遇到的困难。我会在这里跳过它们。
我只需要一个服务器回调客户端(通过nettcp通道)的示例(C#首选),客户端计算答案,然后返回结果。
(IsOneWay = true)
的解决方案不感兴趣,除非我很清楚我对它的含义及其后果感到非常困惑。谢谢!
答案 0 :(得分:3)
检查CodeProject上的this article。这描述了回调的基本示例。你可能不得不改变一些事情:
在回调合约上,操作标记为一种方式 - 这是为了避免因客户端不良而阻塞服务器(建议的做法)。但是如果你必须阻止服务器,那么你需要删除一种方法。请注意,如果您要逐个回调多个客户端,那么您可能必须在不同的线程上回调每个客户端,否则第一个客户端将阻止回调到下一个客户端。
何时调用回调实际上是一个服务器实现。每当客户端加入(或订阅您的需求)时,给定的示例都会维护一个客户端回调通道列表。现在,此列表可用于以您想要的任何方式调用回调。因此,您可以通过简单地遍历列表来调用计时器上的回调。请注意,您必须确保对列表进行线程安全访问。
如果客户端必须在回调中返回一些结果,则无法再使用OneWay。
如前所述,订阅仅指添加到列表(示例中的加入方),取消订阅意味着从列表中删除(离开方)。
修改:
我已从example看到了源代码,并将其修改如下:
在回调合约中添加了一个方法Echo
:
public interface IBeerInventoryCallback
{
...
[OperationContract]
string Echo(string message);
}
当某人离开聚会并从控制台上的客户端打印响应时,从服务中调用Echo。它没有任何问题。
请注意,此示例使用从System.ServiceModel.DuplexClientBase<T>
继承的VS生成的客户端代理,这使客户端代码更加简单。也许,你应该尝试一下。