首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何存储WCF会话,以便其他应用程序可以访问它们

如何存储WCF会话,以便其他应用程序可以访问它们
EN

Stack Overflow用户
提问于 2009-09-07 11:13:35
回答 2查看 1.8K关注 0票数 0

嗨,我有一个像这样操作的应用程序..

Client <----> Server <----> Monitor Web Site

WCF用于通信,每个客户端在服务器上都有自己的会话。这样就可以从服务器使用回调来回调到客户端。

目标是“监控网站”上的用户可以执行以下操作:

a)查看当前在线的所有用户-即正在使用客户端应用程序的用户。

b)选择一个客户端,然后在该客户端上执行操作。

这是一个培训系统,这样,使用web终端的讲师就可以选择他或她的目标客户,然后让客户应用程序做一些事情。或者他们可能想要向客户端发送一条消息,该消息将显示在客户端屏幕上。

我似乎不能做的是在服务器应用程序中存储所有客户端的列表,然后服务器可以检索该列表。如果我可以这样做,那么我就可以访问客户端的回调对象并调用适当的方法。

监控网站上的一个方法看起来像这样...

Service.SendMessage(userhashcode, message)

然后,该服务将以某种方式查找与散列代码匹配的回调,然后执行以下操作

callback.SendMessage(message)

到目前为止,我已经尝试过将回调序列化为一个集中的DB。然而,在服务上序列化远程对象似乎是不可能的,因为客户端存在回调。

此外,我认为我可以在我的服务中创建一个全局哈希表,但我不确定如何做到这一点,并使其适用于广泛的应用。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-10 09:28:09

我所做的事情如下...

WCF connection.

  • When在我的服务中创建了一个静态实例,该实例保留了一个以每个
  1. 的哈希码为关键字的回调字典。创建会话后,它会将自己发布到一个DB表中,其中包含哈希码和用户正在使用的监视器web应用程序的附加连接。它可以从数据库中获取已连接客户端的列表,并获取该客户端的哈希码。
  2. 如果监视器应用程序用户想要向客户端发送命令,则会发生以下情况。

代码语言:javascript
复制
- The hashcode for the sessionn is obtained from the db. 
- A method is called on the service e.g. SendTextMessage(int hashcode, string message).
- This method now looks up the callback to the client from the dictionary of callbacks and obtains a reference to it. 
- The appropriate method in this case SendTextMessage(message) is called on the callback.

我已经测试过了,它工作正常,我还添加了一个功能,使DB表与实际的WCF会话保持同步,并根据需要进行清理。

票数 0
EN

Stack Overflow用户

发布于 2009-09-07 12:37:11

通常,WCF服务是“每次调用”的,例如,每个调用者都会获得一个新的服务类实例,它会处理请求,格式化响应,将其发回,然后进行处理。因此,通常情况下,内存中没有任何“类似会话”的东西。

您所拥有的不是服务类本身,而是服务宿主-充当服务类宿主的类。这要么是IIS (在这种情况下,您只需要监视IIS),要么是启动并运行ServiceHost实例的自定义应用程序(Windows NT服务、控制台应用程序)。

我不知道服务主机可能会有什么样的钩子来连接和“查看内部”--但我想这才是您真正要找的。

WCF服务也可以配置为全会话的,并使用服务类保持会话的启动和运行-但同样:您需要显式地打开它。即使这样,我也不确定您是否有很多API钩子可以“深入”服务主机并查看当前的会话。

问题是:你真的需要这样做吗?WCF公开了无数的性能计数器,所以你可以监控和记录在WCF中发生的任何--这对你来说还不够好吗?

目前,WCF服务并不是真的托管在一个特别设计良好的系统中--这应该会随着所谓的"Dublin“服务器插件的出现而变得更好,它被设计用来托管WCF服务和WF工作流,并为管理员提供良好的监控和管理体验。“都柏林”计划在.NET 4.0上市后不久推出(微软承诺将在2009年年底之前推出)。

Marc

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1388854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档