异步Web服务SOAP

3
我有一个接口,已经作为常规的SOAP Web服务公开。接口的一个方法是客户端将文件发送到服务器,然后服务器处理该文件并返回结果文件。由于处理文件可能需要一些时间,因此我认为使用异步调用该方法是更好的选择。我考虑了以下流程:
客户端调用异步方法并使用附件(MTOM)发送文件。 当服务器接收到文件时,向客户端发送响应,指示文件已被接收并且很快将进行处理。 一旦文件被处理,服务器将向客户端发送响应,指示已经处理完毕,并在响应中还作为附件返回结果文件。
使用CXF可以实现这种方式吗?
谢谢!
3个回答

2
你可以使用异步调用模型回调方法。
在这种情况下,要调用远程操作,您需要调用另一个特殊方法,并将回调对象(javax.xml.ws.AsyncHandler类型)的引用作为其中一个参数传递。每当响应消息到达客户端时,CXF运行时会回调AsyncHandler对象,以便向其提供响应消息的内容。
更多信息请参考以下链接:Apache CXF

感谢您的回答。从您的回答中,我了解到所有这些配置都出现在客户端。我猜想服务器端仍然是同步的。我认为这个配置可能应该在服务器端使用异步servlet(从3.0开始)完成。有什么区别吗? - manash
好的。通常情况下,在同步服务的情况下,只有一个线程会被用来完成请求和响应。但是在异步服务的情况下,一个线程将被单独用来处理来自服务器的响应。因此,基本上,您需要选择支持此功能的框架。https://dev59.com/UE7Sa4cB1Zd3GeqP0Ahg - UVM
根据http://today.java.net/pub/a/today/2006/09/19/asynchronous-jax-ws-web-services.html中的解释,我的问题是,如果我使用CallBack模型,我的服务客户端是否可以用C#编写?由于配置是在客户端完成的,因此JAX-WS的C#等效版本必须支持此功能。 - manash

1

如果你使用像WSDL2Java这样的工具来生成客户端,你甚至可以选择生成一个异步客户端。 它将为您生成一个回调处理程序,其中包含每个服务操作和异常的空方法。你只需要实现这些方法,设置响应接收时要执行的操作即可。 记住,当进行异步调用时会启动一个新线程。


0

是的,一旦您收到文件,您可以将请求ID返回给客户端并在服务器端开始处理,并维护各种处理状态。客户端可以在不同的时间间隔内返回,并在完成时接收处理状态或输出。


谢谢,但这似乎是一种轮询模型,当客户端需要轮询服务器以了解处理是否完成时。我希望服务器在处理完成后发送响应。 - manash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接