嗨,我有一个像这样操作的应用程序..
Client <----> Server <----> Monitor Web Site
WCF用于通信,每个客户端在服务器上都有自己的会话。这样就可以从服务器使用回调来回调到客户端。
目标是“监控网站”上的用户可以执行以下操作:
a)查看当前在线的所有用户-即正在使用客户端应用程序的用户。
b)选择一个客户端,然后在该客户端上执行操作。
这是一个培训系统,这样,使用web终端的讲师就可以选择他或她的目标客户,然后让客户应用程序做一些事情。或者他们可能想要向客户端发送一条消息,该消息将显示在客户端屏幕上。
我似乎不能做的是在服务器应用程序中存储所有客户端的列表,然后服务器可以检索该列表。如果我可以这样做,那么我就可以访问客户端的回调对象并调用适当的方法。
监控网站上的一个方法看起来像这样...
Service.SendMessage(userhashcode, message)
然后,该服务将以某种方式查找与散列代码匹配的回调,然后执行以下操作
callback.SendMessage(message)
到目前为止,我已经尝试过将回调序列化为一个集中的DB。然而,在服务上序列化远程对象似乎是不可能的,因为客户端存在回调。
此外,我认为我可以在我的服务中创建一个全局哈希表,但我不确定如何做到这一点,并使其适用于广泛的应用。
任何帮助都将不胜感激。
发布于 2009-09-10 09:28:09
我所做的事情如下...
WCF connection.
- 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会话保持同步,并根据需要进行清理。
发布于 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
https://stackoverflow.com/questions/1388854
复制相似问题