2011-12-06 93 views
2

情況ASP.NET:如何將訂閱的事件處理程序

我有一個包含有關用戶的Lync微軟2010年會議的一些狀態信息的ASP.NET網絡表單中更新前端。在Page_Load事件中,我註冊了一個監聽Lync會話狀態更改事件的事件處理程序。

事件觸發後,事件處理程序會正確反應並執行其作業:它會更改特定標籤的相應文本。問題是,這些更改在前端網頁中不可見。

代碼

這是一個全球性的Lync客戶端例如,在頁面中定義。

private LyncClient _lyncClient; 

這裏我在Page_Load事件中註冊了LyncClient。

protected void Page_Load(object sender, EventArgs e) 
{ 
    RegisterLyncClient(); 
} 

我的LyncClient實例分配給全球_lyncClient。之後,我註冊了我的事件監聽器。

private void RegisterLyncClient() 
{ 
    _lyncClient = LyncClient.GetClient(); 
    _lyncClient.StateChanged += HandleStateChanged; 
} 

該功能在Lync客戶端更改其狀態時正確觸發。它在調試模式下可見。

private void HandleStateChanged(object sender, ClientStateChangedEventArgs e) 
{ 
    SetLyncStatus(e.NewState); 
} 

標籤文本被正確更改(在調試模式下)。但是這些更改在前端不可見。

private void SetLyncStatus(ClientState lyncState) 
{ 
    lblLyncStatus.Text = lyncState.ToString(); 
} 

假設

如果我使用一個按鈕來手動改變狀態,或者如果我用一個定時器來檢查和調整狀態每秒的變化是顯而易見的。所以我假設在HandleStateChanged事件處理程序中所做的更改不可見,因爲在調用SetLyncStatus函數後沒有回發。

問題

是否可以強制從事件處理回傳,這不是從用戶的動作射擊(例如用戶點擊一個按鈕)?如果可以調用標籤或定義部分的局部刷新,那將是完美的。

任何建議非常感謝。謝謝!

+0

你確切的情況是什麼?可能有更合適的方法來實現您的解決方案,而不是在Web服務器上安裝Lync客戶端 –

+0

是的,那是我在本地開發過程中未識別的另一個問題。確保Lync事件發生在服務器而不是客戶端。好的,謝謝你真的很好的建議... –

回答

2

在嘗試實施任何解決方案之前,嘗試瞭解在客戶端上運行什麼服務器上的內容。也許你有一個桌面開發背景,因此你也需要了解web的無狀態性質。在服務器端發生的任何更改都不會反映在客戶端,反之亦然。一旦服務器響應了請求,它就不會自動向客戶端傳送狀態更新。所以,一個甚至驅動的方法不適用於你的情況。您需要從客戶端進行ping以確定狀態更改。這可以使用AJAX和預定義的週期性時間間隔來完成。

+0

感謝您真正快速的答案!這意味着我必須通過使用定時器或類似的東西定期更新網站。 –

+0

是的,從客戶端使用JavaScript + AJAX您需要反覆ping到服務器以獲取更新狀態。決定優化的ping內部(不要太長不能太短),比如服務器沒有超載 – Chandermani

相關問題