2010-01-28 85 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下载('主要','客户','库存'等)并且您想要独立发布它们的情况。