使用 WCF 向客户端触发事件

Posted

技术标签:

【中文标题】使用 WCF 向客户端触发事件【英文标题】:Fire events to client using WCF 【发布时间】:2012-06-08 14:39:21 【问题描述】:

我知道那里有关于 WCF 回调和事件的教程,但我无法让它们实际工作,或者它们太复杂了。我是一个真正的初学者,所以我很想听听是否有人知道任何针对我目前特别想弄清楚的内容的可靠初学者教程。如果我使用了错误的术语,请原谅我(请纠正我),就像我说我是初学者一样。

问题:

它可能看起来比实际更复杂。基本上我想要完成的是:

    具有一些本地内存(假设是 5 个整数的数组)并运行 WCF 服务的主机。它将侦听来自客户端的查询,并在其中一个整数发生更改时(来自外部源,例如通过命令提示符和 Set() 的用户输入)向客户端触发更新(事件?)。 可以进行直接查询以返回这五个整数之一或订阅主机数组的特定索引的客户端。

我能做什么:

我可以建立连接,但我的服务仅限于独立功能。客户端可以进行“查询”,但仅限于远程函数调用(如“add”,所有参数随函数传递,内部处理)。

我想弄清楚的:

    如何从服务合同函数访问主机内存中保存的一些变量?例如,如何从客户端 GetInt() 调用一个方法,该方法将简单地返回存储在主机应用程序内存中的内容? 如何从主机向客户端推送“消息”?例如,在主机中调用 TellClient(int x),它会调用客户端的某个函数?如果不在双方都运行服务,这是否可能?

TLDR:

主机:服务 客户端。有没有办法在客户端调用任何函数(没有轮询或查询)的情况下将数据(只是一个 int)推送到客户端?有没有办法在不使用静态成员的情况下将 WCF 服务访问变量存储在主机应用程序的实例中?这可以通过简单的方式完成吗?

感谢您的帮助和时间,我知道我写了一本书。如果有人知道任何不错的教程,请指点我。 但是请 - 不要将我指向 Add(int x, int y) 示例,其中客户端只是在主机上调用 add 并返回结果 - 我已经这样做了几次它并没有帮助我掌握 WCF 的真正功能。在这一点上,我真的不想完成任何严肃的事情,我真的想保持简单,这样我就可以了解 WCF 可以做什么,而且我没有发现文档很有帮助。再次感谢大家。

【问题讨论】:

【参考方案1】:

WCF一般用于请求回复的方式,客户端发出请求;和服务器回复。您要实现的是“推拉式”服务;或者在 Microsoft 术语中是双工服务。

在双工服务中,客户端只需连接到服务,服务就会将它们注册到某个内部列表中。每当发生事件(或其他事情)时,它都会向注册的客户发送消息。在您的问题的上下文中,WCF 的关键术语是“双工服务”(您可以在谷歌上找到很多结果)。您可以参考以下教程;msdn 或 codeproject

对于您问题的第二部分,答案是肯定的。但这并不是那么简单。您需要编写一些“wcf 行为”,例如 IInstanceProvider 可能会对您有所帮助。对于所有请求,您可以自己创建服务实例,并将所需的参数注入到服务实例中。 参考以下内容可能会有所帮助:*** 或 msdn。

这个问题有点宽泛,因此我不能 100% 确定这是否是直接答案。但至少使用提供的关键字,您可能会找到正确的方向。

【讨论】:

这是很好的信息,非常感谢您的帮助 - 他们的术语和关键字是我不知道的,所以我无法通过搜索找到我想要的东西。我不怕做研究。我已经找到了更接近我正在寻找的东西(通过寻找双工服务)。再次感谢!【参考方案2】:

你试过这篇文章了吗? http://msdn.microsoft.com/en-us/magazine/cc163537.aspx#S6。 我认为这是对回调的一个不错的解释。它讨论了一个发布/订阅框架,它是您“无轮询或查询”要求的解决方案。

【讨论】:

以上是关于使用 WCF 向客户端触发事件的主要内容,如果未能解决你的问题,请参考以下文章

WCF 服务如何向其客户端引发事件?

在 WCF 双工合同中检测客户端死亡

使用 SignalR、WCF 双工服务和 ASP.Net 通用处理程序向客户端推送通知?

使用 WCF Duplex 回调更新 JQuery 进度条?

如何使用 WCF NetHttpBinding(WebSockets)通过服务器向所有客户端广播(推送)一个客户端发送的消息?

有没有一种简单的方法来模拟 WCF 服务和 WCF 客户端之间的事件?