2014-05-24 53 views
1

我使用Caliburn.Micro构建Windows 8.1通用应用程序。该应用程序使用WebSocket连接到Web服务。无论用户在哪个页面上,只要应用程序处于活动状态,我希望此连接一旦建立,就能保持活跃状态​​。保持WebSocket和一些事件处理程序在应用程序处于活动状态时处于活动状态

目前我正在做这样的:

container = new WinRTContainer(); 
container.Singleton<IConnectionService, ConnectionService>(); 

,似乎工作,我想。我可以将其注入到viewmodels中,并且连接仍处于打开状态,即使未注入服务的视图模型处于活动状态,它也会接收消息。但是,如果这是正确的方式(如果它实际上正在做我期望的),我有点好奇吗?

其次,我使用连接管理器来解析从WebSocket连接返回的JSON并创建相应的类,如RandomThingHappened,并使用Caliburn.Micro的事件聚合器服务广播这些类。对这些感兴趣的人可以订阅并做他们想做的事。但是,无论用户使用哪个视图,都会收到一些我希望处理的消息。这可能吗?我也想过为此创建单例,并且确保在某处实例化这些单例。这似乎有点......有风险。

对此提出建议?

+0

没有与卡利经验,借此与一粒盐,但也许你可以创建视图继承的附加层,以定义实现这些事件一个基本视角? –

+0

这绝对是个好主意@JeroenVannevel,我会试试! – JLe

回答

1

不能确定有关的WebSocket但

我用下面的方法对我的WCF服务(哑终端必须始终连接事业的WCF服务将使用回调

[OperationContract(IsOneWay = true)] 
    void KeepConnection(); 
推送消息发送到连接终端

,并在客户端使用计时器来保持调用服务

var timer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 50) }; 
     timer.Start(); 
     timer.Tick += (sender, args) => 
      { 
       try 
       { 
        if (this.client.State == CommunicationState.Faulted) 
        { 
         this.RegisterTerminal(); 
        } 

        this.client.KeepConnection(); 
       } 
       catch 
       { 
        throw new Exception("Failed to establish connection with server"); 
       } 
      }; 

至于你可以使用EventAggregator发布广播哟你可以参加所有的听课。

你可以阅读更这里Event Aggregator

相关问题