【问题标题】:Accessing Windows Azure Queues from client side javascript/jquery从客户端 javascript/jquery 访问 Windows Azure 队列
【发布时间】:2012-10-01 09:06:49
【问题描述】:

对于 UI 功能,我需要从 Windows Azure 队列中读取数据并相应地更新 UI。

我看到很多 node.js 示例,但没有使用纯 Javascript 或 Jquery。 (azureQuery 很接近,但还没有队列功能,它需要一个 Web API 才能与之交谈)

这是一个使用 asp.net 和 MVC 4 的混合网络应用程序。这个特定页面是使用 MVC 4 生成的。

任何建议将不胜感激。

罗伯托 (PS。能够写入队列也很好)

【问题讨论】:

  • 一种替代方法是将队列的内容放入 blob 存储(可能是 json),然后使用 Javascript 轮询新项目。对 blob 使用 HTTP 范围和/或智能命名可能会相当有效。这肯定比运行您自己的端点更复杂,但如果对队列的读取访问至关重要,则可能值得麻烦。

标签: javascript jquery azure azure-storage


【解决方案1】:

这是无法直接从浏览器中实现的。浏览器中的 JavaScript 必须遵循同源策略,这意味着 JavaScript 只能调用当前网页的域。由于您的网页不会从 <account>.queue.windows.net 提供,这意味着您的 JavaScript 将无法调用该域上的 API。 (如果队列服务提供CORS 标头,这在大多数浏览器中都是可能的,但事实并非如此。)

您需要托管一个代理队列消息的 Web 端点(可能在您的 MVC 4 应用程序中)。您的 JavaScript 将向您的 Web 应用发送一条消息,而您的 Web 应用会将消息放入队列中。

【讨论】:

  • 如果您为队列创建了共享访问签名,您可以 JSONP 到队列中吗?你是否真的能读懂这条消息是另一回事。
  • @RichardAstbury JSONP 是服务器从<script> 标签请求返回 JSON 的协议。我看不出它在这里是如何应用的,因为我们无法控制服务器的响应。 (这是队列服务,我们不拥有它。)
  • 如果您可以检索消息正文而不将其包装在 XML 中,它将适用。然后,如果您的消息是一个 JavaScript 函数,那么您就可以在页面上执行一些操作。但是,就目前而言,浏览器会遇到消息 XML 中的第一个尖括号,并且不会评估您在消息正文中放置的任何内容。
  • 根据这个 MSDN 博客,他们在今年夏天的 Build 会议上提到,CORS 支持将在 2013 年底之前提供:blogs.msdn.com/b/windowsazurestorage/archive/2013/06/28/…
【解决方案2】:

更新:请参阅下面的 cmets 并放弃此答案。

您可以尝试使用队列的共享访问签名 (SAS) 获取消息列表。我刚刚做了一个简单的测试,我为具有“读取”权限的队列创建了一个 SAS。我得到一个类似这样的 URI:

youraccount.core.queue.net/queuename?sv=2012-02-12&st=2012-10-11T04%3A31%3A53Z&se=2012-10-11T05%3A31%3A53Z&sp=raup&sig=PN4dyOoOIBlJPQbQ%2Bu7jDLyt%2FpIc3k2Dk1NZTei

使用这个我创建了一个用于查看消息的 URI

youraccount.core.queue.net/queuename/messages?sv=2012-02-12&st=2012-10-11T04%3A31%3A53Z&se=2012-10-11T05%3A31%3A53Z&sp= r&sig=PN4dyOoOIBlJPQbQ%2Bu7jDLyt%2FpIc3k2k1NZTei6q7Cg%3D&peekonly=true

然后我在我的 JavaScript 代码中使用了这个 URI,并在 Fiddler 中跟踪了请求。我能够看到来自 Windows Azure 存储的响应。

【讨论】:

  • 您是否真的从服务页面(而不仅仅是本地文件)尝试了这个?我希望浏览器阻止这个跨域请求。
  • 您实际上是正确的,尽管我在 W3 Schools 网站上的 TryIt 编辑器中尝试了代码,所以它是远程的。我可以在 Fiddler 中看到请求/响应,但在 JQuery 中给了我一个错误。
  • 是的,GET 请求不需要 CORS 预检请求,因此它们只是被尝试,然后当 CORS 标头没有返回响应时中止。
【解决方案3】:

您可以使用任何受支持的语言通过 REST 界面访问 Windows Azure 队列。使用 JavaScript,您可以进行 ajax 调用以连接 Azure 存储队列以读取和写入消息。一旦您掌握了基于 JavaScript + Ajax 的代码,您只需要使用Azure Queue Storage REST API 来执行任何操作。

Here 是一个使用 JavaScript 连接 Azure 存储队列的示例。您可以修改代码以连接到您的真实 Azure 存储队列,它将满足您的需求:

【讨论】:

  • 这在浏览器中也能用吗?同源政策呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 2016-05-07
  • 2020-12-14
  • 1970-01-01
  • 2014-05-10
相关资源
最近更新 更多