当应用处于活动状态时,保持WebSocket和一些事件处理程序存活
本文关键字:事件处理 程序 WebSocket 保持 应用 活动状态 | 更新日期: 2023-09-27 18:05:03
我用的是Caliburn。Micro构建一个Windows 8.1通用应用程序。该应用程序使用WebSocket连接到web服务。我希望这个连接,一旦建立,保持活只要应用程序是活跃的,无论用户在哪个页面。
目前我是这样做的:
container = new WinRTContainer();
container.Singleton<IConnectionService, ConnectionService>();
,它似乎工作,因为我想。我可以在我的视图模型中注入它,连接仍然是打开的,即使没有注入服务的视图模型处于活动状态,它也会接收消息。然而,我有点好奇,如果这是正确的方式(如果它实际上做什么我期待)?
其次,我使用连接管理器解析从WebSocket连接返回的JSON,并创建相应的类,如RandomThingHappened
,并使用来自Caliburn.Micro的事件聚合器服务广播这些。对这些感兴趣的人可以订阅并做他们想做的事情。但是,有一些消息我希望处理,而不管用户在哪个视图上。这可能吗?我也考虑过为此创建单例,只是要确保在某个地方实例化它们。然而,这似乎有点……风险。
建议吗?
不太确定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将你的事件发布到所有监听类。
你可以在这里阅读更多事件聚合器