【问题标题】:Build an ASP.Net web app with offline functionality构建具有离线功能的 ASP.Net Web 应用程序
【发布时间】:2013-08-08 17:56:58
【问题描述】:

我正在构建一个 asp.net (3.5) 网络应用程序,想知道您是否知道我可以用什么方法来实现它,以便有一些离线功能。

这是必需的,因为人们可以在他们的设备上“安装”网络应用程序(例如,使用 iPhone 上的“添加到主屏幕”功能),然后在离线时使用该应用程序;使用只会受到限制(此时也不需要服务器调用)。

这可以用 .aspx 页面完成吗?

编辑- .manifest 添加:

CACHE MANIFEST
index.aspx

/logo.png
/main.css
/main.js

编辑2号-

我们让它以某种方式离线工作;它在 safari 中可以工作,但我们不希望它在 safari 中使用,我们希望它作为一个独立的应用程序。当我们尝试像这样运行它时,我们得到“无法连接到服务器错误”。 .aspx 页面可以做到这一点吗?

编辑 3 号 -

我们已经让这个使用 .html 页面工作,但还没有使用 .aspx

编辑4号-

它现在可以工作了,虽然我们不确定为什么!我们上周将 index.aspx 添加到 cache.manifest 的“网络”部分(上周没有工作!)这可能有所帮助,但一旦我确定我会告诉你实际发生的事情!

感谢大家的帮助!

【问题讨论】:

  • 文件是否名为“cache.manifest”(iOS 要求)及其响应类型为“text/cache-manifest”?你确定你在这些资源上没有得到任何 404 吗?
  • @pep 是的,该文件名为“cache.manifest”,响应类型也是“text/cache-manifest”。我们也在 IIS 中设置了 MIME 类型。我们也没有收到任何 404。这很混乱!
  • 我使用 ASPX 开发了一个完整的应用程序,在主屏幕应用程序或 safari 上没有缓存问题。由于您似乎遇到了一个奇怪的问题,因此使用呈现给浏览器的 HTML 更新您的答案可能真的很有帮助,这样我们就可以准确地看到发生了什么。您可能不需要发布正文之类的内容,但如果可能的话,请发布文档类型、标题、元标记等任何内容。看起来它应该可以工作 - 我的最后一个问题是确保您似乎覆盖了基础正在做。

标签: asp.net web-applications webforms iphone-standalone-web-app


【解决方案1】:

是的,这可以通过 ASP.NET 完成,因为 ASP.NET 在客户端浏览器中呈现为 HTML 页面,而脱机功能是纯 JavaScript/Html 功能。 Here 是 Stephen Walther 的一篇文章,展示了一种方法。

【讨论】:

  • 谢谢 - 我刚刚尝试添加 ashx 处理程序,但我仍然收到“无法打开,因为它无法连接到服务器”错误。我将使用我当前的 .manifest 文件更新我的初始帖子,因为我可能做得不对。
【解决方案2】:

一种方法——虽然我没有机会实际这样做——是使用 HTML5 的新功能之一:缓存清单。

你可以在这里阅读一个很好的例子:http://www.html5rocks.com/en/tutorials/appcache/beginner/

【讨论】:

  • 谢谢,我去看看。
【解决方案3】:

对于使用 ASP.NET 的离线 HTML5 应用程序,请参阅此link 和此link

对于离线功能,有一些替代方案:

01 - 如果您需要在离线应用程序中存储少量数据,并且安全性不是很大,您可以使用 HTML5 Web Storage (link, link, @ 987654325@,linklink,看看CanIUse了解浏览器版本支持)。

主要缺点是缺乏安全性,是基于键值的(没有复杂的结构),并且存储大小有很大限制(大多数浏览器为 5MB)。


02 - 如果需要更大的数据量,可以看IndexDB(linklinklinkCanIUse)或者Web Sql(link, linklinkCanIUse 用于浏览器支持)。

Web SQL 的主要缺点是 Firefox 和 IE 不支持它。此外,它已被 W3C 弃用。

IndexDB 不错(link),但好像 ios 还不支持(见 canIUse)。

对于方法 1 和 2,您可以在 ASP.NET 应用程序 (link) 中进行响应式设计或专用移动网站。


03 - (更大的灵活性需要更多的努力)在您的 ASP.NET 应用程序中实现 Web 服务和应用偶尔连接应用程序概念的移动本机应用程序(更多信息:link、@987654340 @)

  • ASP.NET Web 应用程序 => 对于 Web 应用程序,公开一个具有与离线功能相关的服务的 Web 服务。

  • 移动应用程序 => 使用应用程序数据库实现本机移动应用程序(例如,开发适用于 android 和 iphone 的应用程序)。然后,您在移动应用程序中创建离线功能,该功能将使用自己的数据库来读取和写入(本地)必须离线可用的数据。

然后,您在依赖互联网的移动应用程序中实现静默同步机制(例如循环线程),该机制将通过 Web 服务访问 ASP.NET 应用程序来搜索更新。这种同步机制将发送本地存储的数据并从 Web 服务中恢复可用于离线功能的数据。


希望对您有所帮助。

【讨论】:

  • 感谢您的回复。我们正在使用本地存储来存储用户需要的任何数据,但是我们遇到的问题是,当我们将 Web 应用程序安装到设备上,然后将设备置于飞行模式时,我们无法启动该应用程序。我们尝试使用 .html 页面作为默认页面,效果很好,但是使用 .aspx 页面时,会遇到上述错误。
【解决方案4】:

是的。正如其他人所说,这可以使用缓存清单来完成。

我建议做的是创建一个handler 来生成cache manifest,它可以是动态的。

缓存清单文件令人痛苦的一点是,除非该文件发生更改,否则不会进行更新。这就是处理程序的用武之地。添加带有 # 作为注释字符的注释部分,然后更新时间戳

#2013-08-08 1:53:36 PM 'This is your comment section

如果这是由处理程序生成的,您可以在每个用户的页面可能已更新时将其存储在数据库中(这使得它在缓存的同时保持动态)

使用缓存清单时要记住的重要一点:

缓存的文件必须与正在访问的文件的确切查询字符串匹配。这在某些设备上似乎区分大小写,并且存在于其中的任何查询字符串必须在另一设备上完全相同,因此您在生成缓存清单文件时需要这种预见性。

【讨论】:

  • 为什么投反对票?这回答了问题并深入了解了如何
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 2013-06-25
  • 2012-01-20
相关资源
最近更新 更多