【问题标题】:WCF calls from jquery with a long process来自 jquery 的 WCF 调用过程很长
【发布时间】:2012-05-06 15:27:24
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: jquery wcf


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 感谢您的回复!我会看看彗星。该站点是一个仅经过身份验证的用户站点,所以我想也许我可以使用会话来模拟一种状态感。
    • 您面临的问题是您仍然需要在新页面上发出请求才能获取数据,并且由于您不想重新开始该过程计算这个结果,你会被困在岩石和坚硬的地方之间。即使有会话,您的新页面也不知道另一个线程发生了什么,只能向服务器发出单独的请求。 Comet 通过在数据准备就绪后将数据实际推送到客户端来确保不需要轮询服务器,而不管原始请求是由哪个进程或页面发出的。
    • 我猜你也可以有 2 个进程,一个计算结果并将其存储在缓存中的“计算数字”请求,然后是一个简单地返回缓存中的内容的“给我数据”请求,但是我可以看到这变得非常复杂且资源密集,因为您需要轮询服务器以了解数据何时准备就绪。这个问题正是 Comet 想要解决的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2012-03-07
    • 1970-01-01
    • 2018-03-02
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多