ASP.NET WebService调用队列

时间:2012-03-23 13:41:11

标签: asp.net wcf web-services msmq message-queue

我有一个ASP.NET Webform,它当前调用Java WebService。 ASP.NET Webform是在内部创建/维护的,而Java WS是一个包解决方案,我们只有一个应用程序的WS接口。

问题是,由于系统负载等原因,Java WS有时响应缓慢,而我无能为力。所以目前目前,如果Java-WS响应缓慢,有时会导致ASP.NET Webform长时间延迟,有时会导致ASP.NET达到其超时值并抛出连接。

我需要确保这两个应用程序之间的数据连接,我可以通过增加超时值来实现,但我不能让ASP.NET表单等待超过几秒钟。

这就是排队系统的概念所在。

我的想法是,让ASP.NET表单构建soap请求,然后将其排入本地队列,然后守护进程运行并在Java-WS上触发请求。

在我开始从头开始构建之前,我需要一些指示。

  1. 我的解决方案是否可行?
  2. 是否有任何库已经可以实现此功能?
  3. 有没有更好的方法来实现我想要的东西?

3 个答案:

答案 0 :(得分:3)

你可以create a WindowsService hosting a WCF service

您的网络应用可以调用Windows服务的WCF方法。

您的Windows服务可以异步调用java Web服务方法,使用 begin/End pattern

您的Windows服务甚至可以存储java Web服务的答案,并通过其他WCF方法公开它们。例如,您可以在WCF服务中使用此方法:

1)允许直接调用java Web服务并返回此调用的标识符的方法

2)另一种通过显示调用的标识符

返回java Web服务调用结果的方法

您甚至可以使用AJAX来调用Windows服务的WCF方法。

答案 1 :(得分:2)

您可以使用MSMQ排队来自您客户端的请求。 请记住,MSMQ不会为您处理任何事情 - 它只是一个传输。

所有这一切都是将MSMQ消息传递给MSMQ队列。

原始消息的创建和交付消息的处理都在您自己的代码中在发送和接收机器上处理:目标机器必须安装MSMQ,并运行自定义服务来接收和处理它们

无论如何,有一个用于使用JAVA与MSQM互操作的库:http://msmqjava.codeplex.com/

另一种方法是你可以在你的一个窗口框上创建一个队列,然后创建一个服务,从队列中获取消息并将它们转发给Java服务

答案 2 :(得分:2)

您有两个不同的问题:

  1. 您的网络表单需要学习向服务发送请求,然后轮询以获取该服务的结果。您可以通过编写一个简单的中间服务(在WCF中)来执行此操作,该服务将具有两个操作:一个用于异步调用Java服务,另一个用于查找异步调用是否已完成,并返回结果(如果有)
  2. 您可能需要持久地将请求排队到Java服务。最简单的方法是,如果性能不是最受关注的(并且似乎不是),则将#1中的中间服务分成两部分:一半使用WCF MSMQ绑定调用另一半。这将透明地使用MSMQ作为传输,导致排队的请求保留在队列中,直到它们被下半部分拉出。下半部分将被编写为Windows服务,以便在系统启动时启动并开始清空队列。