【问题标题】:Asynchronous call from java web service to .net application从 java web 服务到 .net 应用程序的异步调用
【发布时间】:2014-08-05 13:53:39
【问题描述】:

场景:

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

  1. 围绕 java 库编写一个 web 服务

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

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

【问题讨论】:

  • 感谢我迷失了标记。
  • 让我们知道哪个是消费者,哪个是服务提供者。你想在java库周围编写一个Web服务,这意味着Java api将为.Net应用程序提供服务。而在这种情况下.net api 将成为消费者,这是你想要的吗??
  • Som,您是否可以重新表述您的问题,因为我觉得它不是很清楚。

标签: java vb.net web-services asynchronous


【解决方案1】:

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

1 - 异步响应处理程序

应用程序创建一个单独的线程来处理服务器响应,从而使主线程空闲用于其他任务。当响应到达时,通知主线程接收响应。有两种实现策略:池化和回调。使用池化,主线程检查第二个线程中的响应,直到响应可用。使用回调,第二个线程使用回调方法通知主线程。

2 - 请求/确认

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

可以使用异步响应处理程序/回调策略来实现一个简单的解决方案。为此,服务提供者 (java) 可以是一个简单的 jax-ws Web 服务。服务使用者 (.net) 实现可以使用 AsyncCallback 委托。有一个例子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(异步回调委托) http://msdn.microsoft.com/en-us/library/wyd0d1e5(v=vs.100).aspx(服务消费者) http://java.dzone.com/articles/jax-ws-hello-world(服务生产者)

【讨论】:

    【解决方案2】:

    您正计划构建一个长期运行的流程,请考虑使用一些工作流引擎,例如 JBPM 或 Activiti。由于您的调用将是无状态的 Web 服务,并且您打算更好地使用回调,因此可以选择创建持久的长时间运行的工作流,因为它们会处理大部分设计和架构问题,否则您最终会处理它。 例如问题 -请求-响应之间的相关性 - 系统重启时数据丢失 - 应用程序因数据同步而不堪重负。

    轮询和回调只是进程间通信的机制,但您需要处理 req-resp 相关性并确保通信的可靠性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      相关资源
      最近更新 更多