使用WCF向客户端触发事件

时间:2012-06-04 14:09:04

标签: c# wcf

我知道有关于WCF回调和事件的教程,但是我无法让它们实际工作,或者它们太复杂了。我是一个真正的初学者,所以我很想听听是否有人知道任何可靠的初学者教程,这些教程的目标是我现在想要具体解决的问题。如果我使用错误的术语(请纠正我),请原谅我,就像我说我是初学者一样。

问题:

enter image description here

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

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

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

    我想弄清楚:

    1. 如何从服务合同函数中访问主机内存中保存的某些变量?例如,如何从客户端GetInt()调用一个方法,该方法只返回存储在主机上的应用程序内存中的内容?
    2. 如何从主机向客户端发送“消息”?例如,在主机中,调用TellClient(int x),它会在客户端调用某些函数?如果不在双方都运行服务,这可能吗?
    3. TLDR:

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

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

2 个答案:

答案 0 :(得分:6)

通常,WCF用于请求回复方式,客户端发出请求;和服务器回复。您想要实现的是“推拉”服务;或者以Microsoft术语表示双工服务。

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

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

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

答案 1 :(得分:3)

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