2010-01-28 125 views
8

如果其他人解決了Silverlight應用程序的發佈管理問題,我很有興趣聽到。Silverlight業務應用程序的應用程序發佈/升級策略?

我有一個商業應用程序即將發佈,並關注如何「發佈」此應用程序的更新。通常,這個應用程序的用戶會將應用程序全天(並且可能整夜)保持打開狀態,而無需重新加載。

如果需要發佈包含Web服務接口更改的更改,該怎麼辦?如何在客戶端無法部署此錯誤?

我們已經習慣於通過刪除服務器上的最新代碼來部署ASP.Net應用程序。我目前唯一的想法是使用客戶端版本號和定期計時器來檢查更新。

我很想知道別人在實現這個之前做了什麼。

謝謝, 邁克

+0

+1一個非常好的問題。 – AnthonyWJones 2010-01-28 23:25:08

+0

+1同意 - 好問題 – serialhobbyist 2010-01-30 08:59:27

+0

+1同意。我懷疑這在離線瀏覽器外的應用程序中也會變成更大的問題。 – 2010-02-01 04:04:00

回答

1

我剛纔已經回答瞭如何確保的.xap文件不會被瀏覽器緩存的問題,這可能會有所幫助:
Prevent Silverlight xap from being cached by proxy server

但是,這不如果用戶永不重新加載您的應用程序使用。在我自己的應用程序中,這不是一個問題,因爲只要我們部署Web服務更新,用戶就會自動拋出。但我喜歡你的計時器的想法,我會去那個。

0

陳述顯而易見,但不要做任何事情來惹惱你的用戶。例如。他們是否可以花20分鐘輸入數據,將咖啡機夾到咖啡機,然後返回到單擊「提交」以查找計時器已過期,發現更新,並且由於強制重新啓動而丟失了工作?

如果是這樣,我承認這並沒有很多想法,例如,您必須對打破當前版本的Web服務進行更改,是否可以並行使用新的Web服務版本,以便用戶在計時器到期並且工作單元完成之前不會被拋出?或者這也是明顯的?

+0

非常真實。 「定時器方法」只有在數小時後部署發佈時纔是安全的。只有在緊急釋放的情況下才能在白天使用。 – 2010-01-30 12:26:23

+0

在用戶長時間保持登錄狀態的特殊情況下,在某些時間間隔自動將他們的工作保存到隔離存儲器可能是一個好主意?然後,如果計時器到期並且應用程序必須重新加載,那麼當應用程序再次啓動時,可以輕鬆地重新加載自動保存的項目。 – 2010-02-02 21:25:29

0

對於服務器代碼,即端點只是照常進行。對於XAP的我認爲你有幾個選擇取決於你如何處理通信。你可以讓請求包含一個版本號,如果服務器已經更新,然後強制一些代碼重新加載客戶端,有點蹩腳,混亂但可以實現。也許更清潔的解決方案將是控制客戶端會話,這大概是對請求者的請求的一部分。部署新版本時,可能會使客戶端會話無效,可能會強制使用自定義邏輯刷新頁面。如果你的協議是push base,你可以發送命令給客戶端做你想做的事情,對於很多整天都可能有這個基礎設施存在的系統(如果你很好地構建它:))。例如,我們的服務層從存儲庫模型和視圖模型中抽象出來,在我們的例子中,我們可以發送註銷或者特定的命令來啓動客戶端上的一些自定義邏輯,以通知應用程序正在更新並刷新瀏覽器完成後。我們的外殼重量輕,所以我們的模塊(基本上是其他XAP)可以及時更新以進行刷新。

0

我會建議你使用像應用程序拱指南中提到的解決方案:

The Guide Chapter I mean看到部署注意事項。

  • 將該申請分成邏輯 模塊可以分別緩存 ,並且可以在不再次要求用戶 下載整個應用程序 容易地更換 。
  • 版本您的組件。
0

您是否考慮過要保持一個WCF polling duplex頻道在應用程序需要重新載入時發出警報?另外,你可以讓你的WCF調用直接進入包含'interfaced'調用的虛擬目錄。例如:

Silverlight應用程序在 「XXXX \ Default.aspx的」 Silverlight的會談到WCF在 「XXXX \版本2 \ DataPortal.svc」 DataPortal.svc會談到GAC(或以其他方式鹼)組件託管能夠識別什麼版本可以處理什麼呼叫。

這樣,如果升級到「x.x.x.x \ Version3 \ DataPortal.svc」,您仍可以對Version2進行調用,假設這些調用有代碼將它們轉換爲Version3概念。

這有助於您的業務線應用程序具有動態xap下載('主要','客戶','庫存'等)並且您想要獨立發佈它們的情況。