检测当客户端连接到WCF服务

问题描述:

从阅读周围一点点,这是我的理解,只有这样,才能检测到客户端已连接到我的服务是通过编写自己的代码。 我正在使用Singleton服务。我想每次客户端连接到我的服务时显示一条消息,即客户端x已连接ip xxx。没有生成内置事件?我对么?检测当客户端连接到WCF服务

不,我不认为有对你的要求在WCF提供任何支持。

不知道你想要什么来实现这一点,无论是。你的服务类(在你的情况下,只是一个实例)实际上没有任何业务投放消息(我假设在屏幕上) - 这真的不是工作。服务类用于处理请求并提供响应 - 仅此而已。

ServiceHost类可能更适合此功能 - 但同样,它的工作实际上是承载服务,启动WCF运行时等 - 并且它实际上不是UI组件。

什么你可能做的是

  • 有一个管理用户界面(一个WinForms,控制台或WPF应用程序)的服务器旁边的服务上运行,提供管理服务调用
  • 定义这两个服务(例如,使用netNamedPipe的结合是完美的内部应用程序的消息)
  • 当你的“真实”服务获取呼叫时,它做的第一件事是发送消息到管理界面,然后这可使之间的快速连接拿起那条信息并处理它

这样的话,你可以清晰地分开你的真正的服务,它的工作(以提供服务),你想要做的,建立一个清楚分开的系统管理员UI的东西。

+0

我的管理用户界面在我的服务器上运行,但不在我的服务旁边,它负责启动和停止我的服务(打开和关闭)。 它也有我的服务实例,这是我在其他地方发布的问题。所以这是我目前的设置。 正如我的预期,并从您的答案中扣除,如果我想检测客户端连接,保留它们的列表,我必须自己做,(跟踪我自己的代码中的东西)。 感谢您的及时答复。 – Tamer 2010-06-28 17:35:23

+0

类似的问题,但是当客户端连接到服务时,主机程序是否会弹出一个消息框? – ZoomVirus 2014-10-09 10:44:53

我实际上已经实施了我自己的connect,disconnectping服务方法,我一旦创建了通道,我手动从我的客户端调用服务方法。通过在我的所有ServiceContract接口定义(及其实现当然)中将它们用作一种标题部分,它们形成临时的“基本服务定义”,只需要一点点的剪切 - 粘贴。

connectdisconnect的基于字符串的参数将用于发送客户端信息到服务器,并返回服务器信息和(可能是唯一的连接ID)到客户端。另外,一组定时参考点也可能会进入其中。

注意如何SessionMode需要和个人OperationContract性能IsInitiatingIsTerminating明确每种方法规定,最终的结果是什么,我会在所谓的“单日”的服务,它connectdisconnect定义为唯一的会话书挡。

还要注意ping命令将被用作基于定时器的“心跳”呼叫测试服务连接状态和失败ALL连接超时,没有一个单一的配置文件:-)

的目标还要注意,我还没有确定我的错误处理结构,它可能会添加一个或多个方法和/或需要其他类型的更改。

[ServiceContract(SessionMode = SessionMode.Required)] 
    public interface IRePropDalSvr { 
     [OperationContract(IsInitiating=true, IsTerminating=false)] 
     string connect (string pClientInfo); 

     [OperationContract(IsInitiating=false, IsTerminating=true, IsOneWay=true)] 
     void disconnect (string pClientInfo); 

     // ------------------------------------------------------------------------------------------ 
     [OperationContract(IsInitiating=false, IsTerminating=false)] 
     string ping (string pInp); 

     // ------------------------------------------------------------------------------------------ 
     // REST OF ServiceContract DEFINITION GOES HERE 

一个警告:虽然我目前在我的服务类中使用此代码及其实现,但我还没有验证代码。