ASP.NET:購読したイベントハンドラー内でFrontEndを更新する方法
-
28-10-2019 - |
質問
状況
ユーザーMicrosoft Lync 2010セッションに関するいくつかのステータス情報を含むASP.NET Webformがあります。 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();
}
予測
ボタンを使用してステータスを手動で変更する場合、またはタイマーを使用してステータスを1秒ごとに確認および調整すると、変更が表示されます。したがって、setlyncStatus関数を呼び出す後にポストバックがないため、ハンドレストテイチングイベントハンドラー内で行われた変更が表示されないと思います。
質問
イベントハンドラーからのポストバックを強制することは可能ですか?それはユーザーアクションから発生しません(ユーザーがボタンをクリックするなど)?ラベルまたは定義されたセクションの部分的な更新を呼び出すことができれば、それは完璧です。
どんな提案でも大歓迎です。ありがとう!
解決
ソリューションを実装しようとする前に、クライアントで何が実行されているかをサーバーで何が実行しているのかを理解してみてください。デスクトップ開発の背景があるかもしれないので、Webのステートレスの性質を理解する必要があります。サーバー側で起こっている変更は、クライアント側やその逆に反映されません。サーバーがリクエストに応答すると、クライアントにステータスの更新を自動的に通信しません。したがって、あなたの場合、さらに駆動されるアプローチは機能しません。ステータスの変更を決定するには、クライアント側からpingを実行する必要があります。このpingは、定義された周期間隔でAJAXを使用して実行できます。