托管WCF服务或要求消费者托管一个?

时间:2011-08-27 21:42:28

标签: .net wcf web-services soa

我需要在.NET中实现一个桥接应用程序,在高层次上,

    背面的
  • 与OCR系统交谈,向他们发送图像并以可读格式从图像中获取数据
  • 在正面,应用程序将使用桥接服务(WCF或其他方式)提交图像并期望可读数据作为响应。

整个操作将处于异步模式。

将消耗桥接服务的应用程序可以主要基于.NET或Java。 (未来可能存在大型机应用程序)

我的问题是关于将可读数据发送回消费应用程序的解决方案。由于WCF回调不能与Java互操作,我不能使用wsDualHttpBinding。因此,我目前看到的两个替代方案是:

  • a)在桥上托管另一个Web服务 应用程序可以轮询
  • b)让每个消费者应用程序托管基于的Web服务 由桥梁提供的标准化wsdl以他们自己的技术。 然后桥接器将消耗应用程序的web服务 数据准备就绪。

我对这两个选项的问题是:

  • 使用a),轮询始终是资源密集型的,但消费者 应用程序只需要使用这个webservice(生成自己的 代理类)。
  • 对于每个需要注册的应用程序,使用b 有了这座桥,他们需要创建自己的网络服务。这个 似乎没有像SOA架构那样松散耦合。

我的问题是,哪一个更可取,以保持系统的可扩展性和可扩展性? 有没有其他方法来实现这个?

2 个答案:

答案 0 :(得分:2)

我会在这种情况下选择解决方案a)虽然它可能意味着轮询......但是,如果有安全措施(网络/防火墙/代理......)可能导致您的服务,解决方案b)可能有问题无法调用他们的服务......或者他们可以以某种不兼容的方式实现WSDL ......

即使您实施解决方案b)恕我直言,您也必须提供解决方案a)作为后备......

解决方案a)具有最高的工作可能性,因为客户必须已经实施了一些webseervice调用来发送图像数据......

并且你可以使解决方案a)服务器端相当高效,因为操作(OCR)相对“长时间运行”,因此当前状态可以在web服务中大量缓存 - 也许每10秒更新一次状态将是足够...

编辑:

解决方案b)的另一个问题是:当你尝试调用它时,如果他们的web服务暂停一段时间会发生什么?你必须实现一些排序(持久?)队列等,以使这个可靠......

答案 1 :(得分:0)

我实现它的方式如下使用pub-sub:

创建两条消息:  GenerateOCRDataRequest - 包含ClientID,Image byte []  OCRProcessCompleted - 包含ClientID,ProcessedData byte []

客户端应用程序将使用各种clientID作为过滤器订阅OCRProcessCompleted。他们还将发布GenerateOCRDataRequest并包含他们的clientID,以便在响应返回时,他们只会获得自己的请求。

桥接应用程序将订阅GenerateOCRDataRequest - 当它收到它时,它将处理它,然后发布带有必要数据的OCRProcessCompleted

在这种情况下,我假设客户端和网桥都有一个队列,发布的消息将被放置,他们只需根据需要从队列中弹出消息。

如果要按照描述实现场景,可以使用http://pservicebus.codeplex.com/在Java和.NET中提供api来执行pub-sub。这里还有一些如何使用它的示例:http://pservicebus.codeplex.com/wikipage?title=Samples%2fExamples&referringTitle=Home

希望有所帮助