2011-08-27 55 views
1

我需要实现在.NET的桥梁应用程序,它,在一个较高水平,主持一个WCF服务或让消费者主持一个?

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

整个操作将是异步模式。

将被消耗桥的服务的应用程序可以是.NET或Java主要基于。 (有可能是在未来现有的大型机应用程序太的可能性)

我的问题是关于解决发回可读的数据返回给消费应用程序。由于WCF回调不能与Java互操作,因此我无法使用wsDualHttpBinding。因此,2层的替代品,我目前看到的是:

  • 一)有托管在其消费 应用程序可查询的桥梁另一个Web服务。
  • 二)让每个消费者应用程序主机基于通过自己的技术桥梁提供的 标准化WSDL web服务。 然后,桥接器将在其数据准备就绪时使用应用程序的web服务。

我有两个选项的问题是:

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

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

回答

2

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

即使你实现解决方案b)恕我直言,你将不得不提供解决方案a)作为后备...

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

您可以使解决方案a)服务器端相当高效,因为操作(OCR)相对“长时间运行”,因此当前状态可以在Web服务中大量缓存 - 可能每10秒更新状态就足够了...

编辑:

与溶液B的另一个问题)是:如果他们的web服务是下来一些时刻,当你尝试调用它会发生什么?你将不得不实行某种(持久?)队列等让这个可靠...

0

我会实现的方式是与使用发布 - 订阅如下:

创建两个消息: GenerateOCRDataRequest - 包含客户端ID,图像字节[] OCRProcessCompleted - 包含ClientID,ProcessedData字节[]

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

网桥应用将认购GenerateOCRDataRequest - 当它接收到它,它会处理,然后将其与必要的数据

在这种情况下发布OCRProcessCompleted,我假设客户端和桥将有一个队列,其发布的消息将被放置,并且它们将根据需要从队列中简单地弹出消息。

如果你想按照描述的方式实现场景,你可以使用http://pservicebus.codeplex.com/,它提供了Java和.NET API来做pub-sub。还有一些关于如何在这里使用它的例子:http://pservicebus.codeplex.com/wikipage?title=Samples%2fExamples&referringTitle=Home

希望帮助

+2

你真的应该提到,你是拉皮条自己的项目... – ErnieL

+0

我拉皮条吧:)它是免费的,所以没有钱从中获益 – rpgmaker

相关问题