0

我有一个面向 Internet 的 WCF 服务,它调用 LAN 内的其他几个服务。此调用可能需要几秒钟才能完成。

我通过 jquery 调用此 WCF 服务,并在线程返回响应后更新 UI。

我想要做的是确保如果用户在服务运行时导航到另一个页面,通过 jquery 的第二次调用(在新页面上)将不会在另一个线程上再次启动该进程。

是否有任何模式或 WCF 功能来控制此类行为?

4

1 回答 1

0

您的问题是浏览器是无状态的。一个页面中的 HTML、CSS 和 JavaScript 在与另一页面完全不同的上下文中加载。因此,即使您的进程继续运行,它们也无法将数据返回到页面,因为它不再被加载。

听起来您想确保即使用户更改页面也更新您的 UI。这可以通过使用 Comet 来实现。

Comet 的工作方式是通过从浏览器向服务器打开 HTTP 请求。然后服务器保持该连接打开,直到它有数据需要推送回客户端。当服务器准备好时,它会向客户端发送响应。

虽然这种技术通常用于在某些情况发生变化时用新数据更新 N 个客户端,但您可以使用它来将您的响应与特定请求分离。换句话说,您可以设置您的应用程序,以便向服务器发出的请求不会收到响应。相反,服务器将通过彗星连接传递更新。

这将确保任何发出请求然后更改页面的客户端在计算结果后仍会收到对 UI 的更新。

许多主要平台都支持 Comet:Java、PHP、.NET、node.js 是我所知道的支持这种技术的平台之一。

另一种获得支持的类似技术是 WebSockets。然而,并不是所有的浏览器都支持这种技术。首先在您选择的特定平台上对 Comet 进行一些研究,如果您有更具体的问题,可以在这里提问。祝你好运!

于 2012-05-06T07:27:24.167 回答