0

我想要实现的是

服务器端(带有 JSON 或 ASP.NET 页面的 WCF 服务(我还不知道我需要什么))

  1. 通过来自现有页面的 HTTP 请求定期检查最新数据。(这是一个动态页面,不知道我在那里,所以它不能发送更新。)
  2. 如果该页面上有任何更改,请向 Google Cloud Messaging 系统发送发布请求,表明有新数据
  3. 已注册的客户端会收到通知并获得小于 4 KB 的有效负载数据。

问题是 #1 我如何在服务器端定期检查新数据?如果那是桌面应用程序,我肯定会使用计时器。

我卡在这一点上。你能告诉我你认为它应该是什么样子吗

谢谢

4

1 回答 1

1

“通过来自现有页面的 HTTP 请求检查最新数据”是什么意思?是你的页面,还是别人的?另外,为什么您认为您的代码需要位于 WCF 服务或 ASP.NET 页面中?从您目前所了解的情况来看,这听起来像是一个常规的可执行文件。让我们回顾一下它会做什么:

  • 通过 HTTP 拉取页面,检查自上次以来它是否更改
  • 如果是这样,请提取注册客户列表,将 GCM 发送给他们

这两项任务都不涉及提供网页。如果这段代码需要以某种方式与网站交互,那没关系;但它不一定是上述网站的一部分。它可以,但不是必须的。

也就是说,纯粹在 Web 服务器环境中运行计划任务是很棘手的,几乎是不可能的。那里有多种调度工具(首先想到的是 Windows 任务调度程序)——但它们大多是面向执行程序的——即独立程序、EXE。如果您绝对必须在 Web 服务器中运行此代码,您可以编写一些可执行的独立程序(例如,在 JavaScript 中使用 XMLHTTPRequest 或 cURL 调用),这将导致对本地 Web 服务器的 HTTP 请求,并安排对所述脚本的调用在任务计划程序中。

编辑:调度本身不能也不应该是基于网络的。调度引擎在 Web 服务之外——大多数托管服务提供商会在 Windows 任务调度器之上提供这样的服务。检查您的服务器的管理界面(CPanel、RDP 或您有什么)。

无论如何,要从调度程序调用网页,请调度以下命令:

cscript.exe c:\SomePath\CallWeb.js

CallWeb.js 是这样的:

var xh = new ActiveXObject("Msxml2.XMLHTTP");
xh.open("GET", "http://localhost/mypage.aspx", false);
xh.send();

其中 mypage.aspx 是拉取 SonDepremler.aspx、解析、检测更改并发送 GCM 的页面。

这是您的问题 #1 的答案 - 您如何在托管的 Web 服务器环境中进行一些预定的处理。如果您对解决方案的其他部分感到困惑,请提出单独的问题。

于 2012-10-24T15:14:19.743 回答