2

状況

ユーザーの Microsoft Lync 2010 セッションに関するステータス情報を含む ASP.NET Web フォームがあります。Page_Load イベントで、Lync セッション ステータス変更イベントをリッスンするイベント ハンドラーを登録しました。

イベントが発生すると、イベント ハンドラーは正しく反応し、その役割を果たします。特定のラベルの適切なテキストを変更します。問題は、変更がフロント エンドの Web ページに表示されないことです。

コード

これは、ページで定義されたグローバルな Lync クライアント インスタンスです。

private LyncClient _lyncClient;

ここでは、LyncClient を Page_Load イベントに登録しています。

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 関数を呼び出した後にポストバックがないため、HandleStateChanged イベント ハンドラー内で行われた変更は表示されないと思います。

質問

ユーザーのアクション (ユーザーがボタンをクリックするなど) によって発生しない、イベント ハンドラーからのポストバックを強制することはできますか? ラベルまたは定義されたセクションの部分的な更新を呼び出すことができれば完璧です。

どんな提案でも大歓迎です。ありがとう!

4

1 に答える 1

2

ソリューションを実装する前に、クライアントで何が実行され、サーバーで何が実行されるかを理解してください。デスクトップ開発のバックグラウンドを持っている可能性があるため、Webのステートレスな性質も理解する必要があります。サーバー側で発生した変更はクライアント側には反映されず、その逆も同様です。サーバーが要求に応答すると、サーバーはステータスの更新をクライアントに自動的に通知しません。したがって、あなたの場合、駆動されたアプローチでさえ機能しません。ステータスの変更を確認するには、クライアント側からpingを実行する必要があります。このpingは、事前定義された定期的な間隔でAJAXを使用して実行できます。

于 2011-12-06T06:18:32.553 に答える