从java Web服务到.net应用程序的异步调用

时间:2014-08-05 13:53:39

标签: java vb.net web-services asynchronous

情景:

有一个java库可以帮助异步监听一些  系统事件。我打算使用已经实现的异步  来自vb.net项目的功能。  我计划通过以下方式解决这个问题:

  1. 围绕java库编写Web服务

  2. 将该服务的引用添加到.net应用程序。

  3. Web服务将作为.net应用程序在tomcat上本地运行。我面临的问题是如何让Web服务异步地与.net应用程序通信? .net应用程序是否应该阻止并等待Web服务,如果是这样的话?

2 个答案:

答案 0 :(得分:3)

我认为首先您需要一种异步服务通信的设计模式,以更好地满足您的系统要求。

1 - 异步响应处理程序

应用程序创建一个分离的线程来处理服务器响应,使主线程可以自由执行其他任务。当响应到达时,通知主线程接收响应。有两种实现策略:池化和回调。使用池时,主线程会检查第二个线程中的响应,直到响应可用。使用回调,第二个线程使用回调方法通知主线程。

2 - 请求/确认

此模式基于服务器参与来实现异步通信。该进程不是将进程拆分为两个客户端线程,而是分为客户端和服务器之间的两个不同事务。这种模式需要某种相关性识别来关联请求和响应事务。消息传递子系统用于实现更高的可伸缩性和可用性。

可以使用异步响应处理程序/回调策略实现一个简单的解决方案。为此,服务提供者(java)可以是一个简单的jax-ws Web服务。服务使用者(.net)实现可以使用AsyncCallback Delegate。有一个例子here

<强>参考文献:

http://www.servicedesignpatterns.com/WebServiceInfrastructures/AsyncResponseHandler http://www.servicedesignpatterns.com/ClientServiceInteractions/RequestAcknowledge http://msdn.microsoft.com/pt-br/library/system.asynccallback(v=vs.110).aspx(AsyncCallback委托) http://msdn.microsoft.com/en-us/library/wyd0d1e5(v=vs.100).aspx(服务消费者) http://java.dzone.com/articles/jax-ws-hello-world(服务提供者)

答案 1 :(得分:1)

您计划构建一个长时间运行的流程,请考虑使用JBPM或Activiti等工作流引擎。由于你的电话将成为无国籍的网络服务。你打算更好地回调将是一个创建持久的长期运行工作流的选项,因为他们会处理大部分的设计和工作。建筑问题,否则你最终会处理它。 例如问题 - 请求 - 响应之间的关联 - 重启系统的数据丢失 - 应用程序因数据同步而不堪重负。

投票&amp;回调只是进程间通信的机制,但您需要处理req-resp关联以及确保通信的可靠性。