2010-03-09 41 views
1

我有一個用戶控件,在一個受到嚴重打擊的網站的幾個頁面上顯示。其中一些頁面包括我們的博客側邊欄,我們的論壇邊欄,並在我們的主頁中間右鍵。這意味着這個控制是很多的。這個控件意味着在一個twitter賬戶中讀取特定賬戶的RSS feed,並寫出最後2條推文。下面是我的Page_Load控件的大部分。我在try {} catch中使用它,因爲它似乎在製作時,站點無法經常加載XML,所以我需要翻閱友好的錯誤消息。你可以看到,我只是獲取2個最近的項目,並在前端的轉發器中重複它們。如果有任何失敗,我翻轉錯誤的PlaceHolder,它表示「Twitter不可用」。我應該輸出緩存我的控件,查找twitter RSS onload?

我經常在prod網站上看到這個錯誤消息,所以我想知道它是否對RSS提要做出了太多要求。我在想輸出緩存控制10分鐘,但我想,「如果它被緩存在錯誤狀態呢?」?然後保證顯示錯誤信息面板10分鐘。我的問題是,如果它在創建新緩存版本時顯示錯誤,是否真的會被緩存10分鐘(假設我設置了Duration="600")?有沒有人有任何提示,如何才能使這項工作更好或緩存時,只有真正的Twitter數據呈現,而不是錯誤消息?

在此先感謝

回答

1

而不是緩存整個頁面,我想你

var latestItems = .... 

聲明,如果你收到一個錯誤返回cache the application data爲好。您可以使每個不同的緩存持續時間,所以如果您成功獲取數據,緩存它的時間要長於出現錯誤的時間。一種實施方式如下所示:

object Twitter = Cache["MyTwitter"]; 

if(Twitter==null) 
{ 
    // cache empty 
    try 
    { 
     var latestItems = (load items) 
     Cache.Insert("MyTwitter", latestitems, null, DateTime.Now.AddSeconds(600), 
      Cache.NoSlidingExpiration); 
     Twitter = latestitems; 
    } 
    catch(Exception ex) 
    { 
     Cache.Insert("MyTwitter", ex.ToString(), null, DateTime.Now.AddSeconds(60), 
      Cache.NoSlidingExpiration); 
     Twitter = ex.ToString(); 
    } 
} 

if(Twitter is string) 
{ 
    phError.Visible = true; 
} 
else 
{ 
    rptTwitter.DataSource = Twitter; 
    // rest of data binding code here 
} 

這裏有兩個部分。第一部分是檢查緩存,如果對象不在緩存中,請進行加載。如果出現錯誤,只需將字符串存儲在緩存中即可。

然後與你對象,如果它是一個字符串,你知道你有一個錯誤。否則,這是檢索Twitter Feed的結果。

+0

謝謝!這是一個很棒的代碼片段。我用它,它運作良好。 – 2010-03-09 20:52:36

相關問題