我们有一个使用AJAX与ASP.NET Web服务通信的Web应用程序。我们想编写另一个可以脱机使用的版本。我们需要能够尽可能地重用现有代码。我们应该考虑哪些方法?
该应用程序当前正在使用XmlHttpRequest从服务器获取动态数据。显然离线版本将无法与服务器通信,但它确实需要与某些东西交谈!我确信在客户端安装IIS或Cassini会起作用,但我希望有一个更简单的解决方案。 JavaScript是否没有其他方式可以与某些外部代码通信?
答案 0 :(得分:3)
现在有很多离线网络应用程序。它只是从AJAX发展而来。
例如:
WoaS(维基上的棍子/ stickwiki),Tiddly Wiki,
Google doc和Gmail将脱机。
您无需网络服务器即可在离线模式下运行这些网络应用程序。只需在客户端存储所需的数据,脚本(通常为XML)。
答案 1 :(得分:1)
其中一种可能性是使用卡西尼号。这是一个Web服务器,充当ASP.Net运行时的主机。您可以在Windows应用程序或Windows服务中托管Cassini。在这种情况下,您不必重写Web应用程序和Web服务。
大多数其他解决方案都需要重写您的网络应用和您的网络服务。根据您编写现有应用程序的方式,您可以重复使用更多或更少的代码。
答案 2 :(得分:1)
您是否考虑过使用应用程序缓存和离线存储的HTML5?
答案 3 :(得分:0)
如果您希望创建软件包的“离线”版本,那么到目前为止最大的问题是需要将您的站点安装到IIS的本地副本(注册虚拟目录等)。我几年前曾简短地追求这一点,并且沮丧地放弃了。 可以完成:许多软件供应商(如DevExpress)都这样做,因此您可以获得其示范项目的本地副本。的确,我能够做到这一点。问题是经典的“它适用于我的计算机”综合症。根本没有办法保证我的大多数最终用户都具备接近技术熟练程度的能力。
因此,我强烈建议您不继续这条道路,除非您拥有技术熟练的用户和庞大的支持人员。
但还有一个非常重要的问题:您是否将所有数据访问代码抽象为DAL?如果没有,那么您在管理数据访问方面还有很多工作要做。
更新:用户“Rine”推荐了Cassini。我只是想让你知道我追求的是Cassini和另一个第三方网络服务器。我认为卡西尼存在许可问题,但可能是错误的 - 已经有一段时间了。但是,我确实清楚地记得在使用这种方法进入屏障之后遇到屏障并且非常很少的文档来帮助我。
答案 4 :(得分:0)
如果您希望Web应用程序脱机运行,则需要绑定到localhost(127.0.0.1)地址的Web服务器(IIS for ASP)。在此之后,您可以通过在Web浏览器中键入http://127.0.0.1/来访问您的Web应用程序,就像在线一样。
答案 5 :(得分:0)
如果AJAX
依赖XMLHttpRequest
,您可以:
XML
的静态版本设置为XMLHttpRequest
,然后将其放入磁盘上的文件夹中。XMLHttpRequest
URL
,以便他们指向磁盘上的文件。XMLHttpRequest
,以便他们不会检查状态(0
协议始终为file://
。所有JScript
适用于file://
个网页以及http://
个网页。
当然,这不是开发静态页面的最佳方式,但它可以为您节省一些时间进行重写。
答案 6 :(得分:0)
我没有遇到任何专为asp.net构建的框架,例如可用于PHP或RoR的框架。 以下是Steven的一篇很好的文章,介绍HTML 5和ASP.Net Creating HTML 5 Offline application
答案 7 :(得分:0)
显然离线版本无法与服务器通信,但确实需要与之交谈!
输入HTML5 LocalStorage。它的工作方式类似于数据库,使您可以将数据放在客户端上。实际上,你必须在javascript中修改部分代码并将其传输到客户端,但之后它将脱机工作。
本地存储的工作方式如下: - Setter:window.localStorage.setItem(KEY,VALUE) - Getter:window.localStorage.getItem(KEY) - 删除:window.localStorage.removeItem(KEY)
要使主页脱机工作,您需要创建一个清单。这用于在客户端上存储完整的站点。有关清单的更多信息,请参阅此处: http://diveintohtml5.info/offline.html
答案 8 :(得分:-1)
您想构建一个离线工作的Web应用程序吗?它无法完成。
您可以将接口代码从其他代码(在不同的dll中)拆分,并创建一个Windows应用程序来模仿Web应用程序的行为。这样,您就拥有2个不同的用户界面,但业务规则和数据访问的代码相同。
我真的没有看到任何其他方式...