【问题标题】:Host a WCF service or ask consumers to host one?托管 WCF 服务还是要求消费者托管一个?
【发布时间】:2011-08-27 21:42:28
【问题描述】:

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

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

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

将使用网桥服务的应用程序可以主要基于 .NET 或 Java。 (未来也可能存在现有的大型机应用程序)

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

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

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

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

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

【问题讨论】:

    标签: .net wcf web-services soa


    【解决方案1】:

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

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

    解决方案 a) 工作正常的可能性最高,因为客户端必须已经实现了一些网络服务调用来发送图像数据...

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

    编辑:

    解决方案 b) 的另一个问题是:如果他们的 web 服务在您尝试调用它时关闭了一段时间会发生什么?您必须实现某种(持久?)队列等以使其可靠...

    【讨论】:

      【解决方案2】:

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

      创建两条消息: GenerateOCRDataRequest - 包含 ClientID、图像字节 [] OCRProcessCompleted - 包含 ClientID、ProcessedData byte[]

      客户端应用程序将订阅 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

      希望有帮助

      【讨论】:

      • 我在拉皮条 :) 它是免费的,所以没有任何收益
      猜你喜欢
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多