2

現在のページから、動的コントロールを作成して更新パネルに追加するメソッドにアクセスしようとしています。CacheItemUpdateCallback の最後にこのメソッドを呼び出して、キャッシュ内の新しいデータを表示したいと考えています。

いくつかの調査を行った後、スレッド固有であるため、非同期メソッドから HttpContext.Current にアクセスできないようです。

新しい値がキャッシュに書き込まれた後に動的コンテンツを強制的に更新するより良いプロセスはありますか、または CacheItemUpdateCallback から HttpContext.Current にアクセスできる手段はありますか?

コンテンツを作成するメソッド。ここで、コンテナーはページ上の div オブジェクトの配列です。

public void createInnerHtml()
{
    this.contentLength = ddlContentNumber.SelectedIndex + 1;
    for (int i = 0; i < this.contentLength; i++)
    {
        containers[i].Controls.Clear();
        containers[i].Attributes["Data-Value"] = mainFeeds[i].DataValue.ToString();
        containers[i].InnerHtml = mainFeeds[i].getHeaderString();
        containers[i].Controls.Add(controlManager.getControl(mainFeeds[i]));
    }
}

私ができるようにしたいこと:

private void openIncidentsUpdateCallback(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration)
{
    dependency = null;
    absoluteExpiration = DateTime.Now.AddSeconds(25);
    slidingExpiration = Cache.NoSlidingExpiration;
    expensiveObject = getExpensiveObject() 

    Page page = (Page)HttpContext.Current.Handler;
    if (page != null)
    {
        ((ReportPage)page).createInnerHtml();
        page.updatePanel1.update()
    }
}
4

1 に答える 1

0

基本的に、キャッシュ オブジェクトを照会するメソッドを呼び出す ajax ポーリングを作成する必要があります。使用されるスレッドは要求オブジェクトとは関係がないため、キャッシュ有効期限コールバックからページを更新することはできません (これは asp.net/iis プロセスの一部であり、HttpRequest (.コンテキストが移入されます))。

したがって、基本的には、データを表示する必要があるページで、$.ajax を作成するか、asmx エンドポイントまたは HttpContext をクエリできる WebMethod を呼び出す asp.net ATLAS タイマー (または必要に応じてストレート .js ajax) を使用します。 Current.Cache を実行し、適切な string/html/json/xml/whatever データを返します。

アップデート:

プログラマーが長いポーリング/ポーリング手法を理解/実装しなくても、クライアントを更新するサーバーに利用できるライブラリがあります。SignalR http://www.asp.net/signalrをご覧ください。

于 2013-08-20T15:58:18.340 に答える