2013-08-19 105 views
1

我正在使用ASP.NET(而不是MVC)和.NET v4(不是v4.5)編寫Web應用程序。ASP.NET中的後臺任務

我從第三方Web服務獲取一些必須顯示的數據,其中一個方法需要很長時間(幾秒)才能完成。要獲取/預取的信息取決於用戶的初始請求(因爲不同的用戶請求有關不同對象的詳細信息)。

在單用戶桌面應用程序,我可能:

  • 儘可能快地顯示我的UI
  • 具有非UI後臺任務提前獲取信息
  • 因此希望有數據已經牽強/緩存的版本,由當時的用戶向下鑽取到UI要求它

要使用ASP.NET做類似的事情,我猜我可以:

  • 使用一個BackgroundWorker,傳遞會話實例作爲參數傳遞給工人
  • 在工作人員的任務完成後,如果用戶的數據請求到達時獲取的數據寫入會話
  • 面前的任務是完成,然後阻止,直到它完成

您是否預見到問題,您能否提出改進建議?

[有StackOverflow上關於ASP.NET和後臺任務等問題,但這些似乎都對獲取和更新全球應用的數據,而不是特定的會話的數據。]

回答

1

爲什麼不使用相同的紀律,在桌面應用程序:

  1. 加載頁面而不將數據從服務(= Display my UI as quickly as possible
  2. 抓取使用AJAX調用(= Have a non-UI background task to fetch the information in advance
  3. 此i中的服務數據5事實上是相同的,雖然可以顯示動畫GIF說明你仍在進行中......(Therefore hope have an already-fetched/cached version of the data, by the time the user drills down into the UI to request it

爲了發佈一個示例代碼,將有助於知道你是否使用jQuery?純javascript?別的東西?沒有JavaScript?

編輯
我不知道這是否是你的計劃,但另一個想法是獲取在服務器端的數據,以及和高速緩存中的數據以供將來的請求。
在這種情況下,階段將是:

  1. 獲取請求。
  2. 是緩存的服務數據嗎?
    2.a. 是嗎?包含完整數據的後頁面。
    2.b. 不可以?沒有服務數據的帖子頁面。
    2.b.i.在服務器端獲取服務數據並將其緩存用於未來的請求。
    2.b.ii.在客戶端獲取服務數據並緩存當前會話。

編輯2:
裸記住,這門學科的一面是,如果你獲取數據變化的方法,你就必須記住要修改它無論在服務器和客戶端。

+0

我目前正在使用一個簡單的JavaScript和會/可以使用jQuery。如果我正在使用ajax,如果用戶在請求完成之前試圖導航/向下鑽取,會發生嗎?例如,頂層頁面應立即說:「您選擇了對象'ABC';您可以查看其'Foo','Bar'和'Baz'組件的詳細信息。」並有一些數據(來自更快的來源)供用戶查看。只要我知道他們對ABC感興趣,我也想開始提取較慢的數據,以便在他們點擊任何Foo/Bar/Baz組件時可用。 – ChrisW

+1

我目前使用類似REST的URL,例如'http:example.com/Report.aspx?id = ABC'和'http:example.com/Report.aspx?id = ABC&sub = Foo' – ChrisW

+0

使用jQuery it很容易使用這些事件並改變用戶可以做什麼和不可以做什麼。我認爲向他展示一條消息/動畫gif以通知他正在進行是合理的。這不適合你嗎? –