使用 WS 寻址的异步 Web 服务

Posted

技术标签:

【中文标题】使用 WS 寻址的异步 Web 服务【英文标题】:Asynchronus Web service using WS Addressing 【发布时间】:2010-09-21 22:36:56 【问题描述】:

我需要实现一个启用 WCF WS 寻址的 Web 服务,该服务基于方法的参数执行长时间运行的进程。

客户端不需要等待结果,因为它会直接传递到数据库表中。但是,Web 方法确实需要返回一个“跟踪 ID”号(实际上是一个 GUID),以便客户端可以使用它来从数据库中检索结果。

    Web 方法只接受接收到的参数,创建一个新的 GUID 并将所有这些信息存储在数据库表(或 MSMQ 队列)或类似的东西中。然后它将跟踪 GUID 返回给客户端。外部服务(可能是 Windows 服务)会不断轮询“收件箱”,为每个请求执行长时间运行的过程,并生成结果并响应回调服务

提前致谢

塞卡

【问题讨论】:

【参考方案1】:

你的问题是什么?但是根据您的描述,网络服务本身并不是异步的。在 java webapp 中,我会像这样实现一个简单的 webapp:

存储数据、启动线程并返回 guid 的 Web 服务 线程执行长期任务并为其 guid 存储结果 一个 web 服务返回一个 guid 的结果,如果还没有完成的话。

最佳实践是为长期任务使用自己的守护线程组,每个线程都以 guid 命名。覆盖组的 uncaughtException() 方法以将异常存储为任何错误的 guid 的结果。

【讨论】:

以上是关于使用 WS 寻址的异步 Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

WCF寻址 - 删除WSA:TO元素

WS-Addressing 的目的是啥?

WS 寻址和多个“回复”

使用 WS 安全性在 WCF .NET 中向 Java Web 服务发送请求

使用内置 Java JAX-WS Web 服务器发布多个端点

使用 javax.ws.rs.core.Application 实现通用 JAX-RS Web 服务