2014-05-24 60 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

相關問題