在应用处于活动状态时,保持WebSocket和一些事件处理程序处于活动状

时间:2014-05-24 18:25:59

标签: c# windows-runtime caliburn.micro

我使用Caliburn.Micro构建Windows 8.1 Universal应用程序。该应用程序使用WebSocket连接到Web服务。我希望这个连接一旦建立,只要应用程序处于活动状态,就可以保持活动状态,无论用户在哪个页面上。

目前我这样做:

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

它似乎按我的意愿工作。我可以在我的viewmodels中注入它,并且连接仍然是打开的,即使没有注入服务的视图模型处于活动状态,它也会接收消息。然而,如果这是正确的方式(如果它实际上正在做我期待的事情),我有点好奇吗?

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

建议?

1 个答案:

答案 0 :(得分:1)

不确定websocket但是

我正在使用以下方式进行My 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