WCF REST - 是不是可以在不结束执行的情况下返回响应?

Posted

技术标签:

【中文标题】WCF REST - 是不是可以在不结束执行的情况下返回响应?【英文标题】:WCF REST - Is it possible to return response without ending the execution?WCF REST - 是否可以在不结束执行的情况下返回响应? 【发布时间】:2016-09-17 07:49:51 【问题描述】:

您很可能会明白,我一般对异步操作不是很有经验(仅使用 android 的 AsyncTask)。

这是 WCF REST POST 方法的概要;我将使用这张图片来解释我想要实现的目标。

FirstJob 将一些内容保存到数据库中。

SecondJob 读取保存在数据库中的内容并对数据进行一些处理。

客户端不关心 SecondJob 中发生了什么,只想接收来自 FirstJob 的响应。

所以这两个作业不需要并行运行,因为 SecondJob 依赖于 FirstJob;理想情况下,SecondJob 将在单独的线程/上下文(?)或类似的情况下运行。

据我所知,第二个作业确实在单独的线程中开始,在第二个作业运行时执行到达 return 语句,但请求在 SecondJob 完成之前不会结束。

【问题讨论】:

【参考方案1】:

我个人会将第二个作业视为单独的 POST 操作,并从控制器调用第二个作业 POST。控制器是第一个作业的控制器,可以从第一个作业返回正确的状态;它只是碰巧在执行此操作时将 POST 调用到第二个端点。

这种方法的好处是第二个作业甚至不需要在同一个 IIS 上(在 NLB 场中它可以在任何地方),因此您可以免费获得负载平衡。或者,“第二个作业服务器”可以位于仅为此类后台处理任务保留的特定 URL 上。

【讨论】:

感谢您的回答。我也考虑过这种方法,但这里的问题是第二个工作可能会影响多个用户,我不想依赖客户端在收到响应后发出第二个请求。我需要让 SecondJob 以更可靠的方式开始。 我并不是建议客户端应用程序启动第二个工作 - 我建议由第一个工作调用的控制器本身启动第二个 POST。客户不必知道第二个工作需要开始 - 它只是自动的。 哦,我明白了。我会试试看的。【参考方案2】:

我建议你不要依赖 IIS 来处理你的后台任务,因为它可以在不等待的情况下关闭它。我建议您创建一个 Windows 服务应用程序,该应用程序将通过另一个 WCF 绑定或数据库请求或其他方式接受第二个作业的请求。

正如@PhillipH 所说,您可以通过控制器的另一个请求获得第二个作业的结果。

【讨论】:

【参考方案3】:

我最初尝试做的事情实际上是在工作,但是 Visual Studio 调试器愚弄了我。我在没有调试器的情况下再次进行了测试,但是使用了 Tread.Sleep(60000) 并且看起来它的行为符合预期。 api 调用返回响应后,SecondJob 继续在后台运行。

【讨论】:

以上是关于WCF REST - 是不是可以在不结束执行的情况下返回响应?的主要内容,如果未能解决你的问题,请参考以下文章

没有 SSL 的 WCF 身份验证

如何同时使用 SOAP WCF 服务和 REST API

是否可以在不添加服务参考的情况下访问 WCF 服务?

WCF REST JSON 返回动态列表

WCF REST 到 Web API [关闭]

在不使用 Azure SDK 的情况下使用 REST API 将流上传到 Azure Blob 存储