在客户端上使用时升级Silverlight应用程序

时间:2013-01-27 17:52:54

标签: .net silverlight

我有一个Silverlight 5应用程序,它通过WCF服务与服务器通信。

大多数使用该应用程序的用户都在浏览器中运行(主要是Internet Explorer,但也使用其他浏览器),还有一些用户安装OOB(浏览器外)。

当应用程序启动时,它会检查更新的版本并在必要时进行升级。这里没什么不寻常的。

偶尔,大多数在晚上和周末,我会对解决方案进行升级。这可能是数据库中的更改,WCF服务中的更改,Silverlight应用程序本身的更改或所有内容的混合。在大多数情况下,这绝对没有问题。

我的问题是有些用户从不关闭他们的网络浏览器。有些用户甚至可以通过Citrix窗口工作,只关闭Citrix窗口并在下班后回家,让Silverlight应用程序运行并存在于Web浏览器中。而有些人根本就没有关闭浏览器。 或者,如果他们运行OOB,他们会让应用程序保持打开状态。那是我的问题。因为他们永远不会检查新的更新。 Silverlight应用程序永远不会升级,也不适合可能升级的新WCF服务。

所有这些都使得Silverlight应用程序崩溃并抛出奇怪的例外,因为世界各地已经发生了变化。

有没有人遇到类似的问题,实际上找到了一个很好的解决方案?

我试过了:

  • 创建一个在任何键盘或鼠标点击时重置的计时器,并在给定的一段时间后退出应用程序而没有任何活动。但似乎这个计时器有时候不会计数,比如从RDP或Citrix会话连接dos。

  • 每次显示某个控件或窗口时都要检查更新。但这不是一个好的解决方案,因为所有用户可能都不会使用相同的。如果用户正在处理某些事情,它也可能会中断用户。

但他们在我看来都像是一些有点俗气的解决方法。

任何建议,任何人?

1 个答案:

答案 0 :(得分:0)

在用户激活时重新启动计时器对我没有意义。如果在更新发布时它们处于活动状态怎么办?当然最好是被打断而不是让应用程序崩溃?

最好以固定间隔运行计时器。如果需要重新启动,它将调用CheckAndDownloadUpdateAsync并提示用户。

对于未运行计时器或在间隔之间发布关键更新的边缘情况,您可以尝试在App.Application_UnhandledException方法中执行更新逻辑。 只是不要忘记将事件标记为已处理,您确实需要安装更新...

这样你应该完全覆盖。


修改:对于浏览器内应用程序,您只需要担心何时刷新页面,如this can be enough to ensure the XAP is the latest

您的计时器可以调用一些JavaScript来实现此目的,但我认为最好只在App.Application_UnhandledException事件中触发刷新。如果你真的想要将它无缝化,你可以事先将状态写入IsolatedStorage。