【发布时间】:2016-06-27 06:56:16
【问题描述】:
我正在尝试在 WCF 中实现基本通信。到目前为止,我一直在关注这个 msdn 教程:https://msdn.microsoft.com/en-us/library/ms734712%28v=vs.110%29.aspx
我的问题:在应用程序中,大约有 3 个独立的 WCF 服务(但包含在同一个 WCF 服务库项目中),用于 3 种不同类型的客户端。
我需要创建一些将在所有 3 个 WCF 服务之间共享的数据结构。例如,我想跟踪连接的客户端,并希望能够访问服务中的此类列表以添加、删除等。通常,服务器应用程序应该保存此类数据并维护它,但我已经有点与所有 WCF 抽象混淆。似乎所有的通信逻辑都必须在 WCF 服务中实现。服务器应用程序只是创建并打开与服务关联的 ServiceHost 对象,它无法向服务公开特定数据(这也可以修改数据)?那么问题是在哪里以及如何在多个 WCF 服务之间共享数据?
我需要跟踪某些消息到达的频率。这怎么能在 WCF 服务中完成?在服务的构造函数中创建一个单独的线程并监控一些服务在收到给定消息后会更新的字段?这会是一个可行的解决方案吗?
WCF 服务是真正可行的方法还是有更好的方法?如果您能给我一些必要的提示和关键字来完成我所描述的,我将不胜感激!
【问题讨论】:
-
1.将您的数据结构 (DataContracts) 放在可以在服务之间共享的单独程序集中。 2. 不要使用线程,使用某种持久存储(数据库、缓存等)。
-
跟踪连接的客户端 - 在典型的 WCF 服务中,您的客户端仅在单个 WCF 服务调用期间连接 - 没有像这样的“长期”连接使用数据库 - 每个调用都是一个单独的连接,一旦响应发送回客户端就完成了。
-
@marc_s 我的意思是客户端会发送某种登录消息,然后我想将它们添加到某个列表中,直到收到注销消息。
-
这不是 WCF 的工作方式......每个调用本身就是一个调用,独立于之前的任何调用或之后的任何调用......客户端是 only i> 在处理呼叫时连接 - 没有像其他系统那样的“持久”连接
-
@Tim 我需要在所有其他 WCF 服务中访问此类列表的完全相同的实例。