Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 托管WCF服务还是要求消费者托管WCF服务?_.net_Wcf_Web Services_Soa - Fatal编程技术网

.net 托管WCF服务还是要求消费者托管WCF服务?

.net 托管WCF服务还是要求消费者托管WCF服务?,.net,wcf,web-services,soa,.net,Wcf,Web Services,Soa,我需要在.NET中实现一个桥接应用程序,在较高的层次上 在背面,与OCR系统对话,向他们发送图像并以可读格式从图像中获取数据 在前端,应用程序将使用网桥的服务(WCF或其他)提交图像并期望可读数据作为响应 整个操作将处于异步模式 使用网桥服务的应用程序可以是基于.NET或Java的。(将来也有可能出现现有的大型机应用程序) 我的问题是关于将可读数据发送回消费应用程序的解决方案。由于WCF回调无法与Java互操作,因此我无法使用wsDualHttpBinding。因此,我目前看到的两个备选方案

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

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

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

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

  • a) 将另一个web服务托管在消费 应用程序可以轮询
  • b) 让每个使用者应用程序基于 桥接器以自己的技术提供标准化的wsdl。 然后,当应用程序的Web服务 数据准备就绪
我对这两种选择都有以下问题:

  • 对于a),轮询总是资源密集型的,但是消费者 应用程序只需要使用此Web服务(生成自己的Web服务) 代理类)
  • 对于b,对于每个需要注册的应用程序 有了网桥,他们需要创建自己的Web服务。这 似乎不像SOA架构建议的那样松散耦合
我的问题是,哪一个更适合保持系统的可扩展性和可伸缩性?
有没有其他方法来实现这一点

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

即使您实施了解决方案b)IMHO,您也必须提供解决方案a)作为备用方案

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

您可以使解决方案a)服务器端相当高效,因为操作(OCR)相对而言是“长期运行”的,因此当前状态可以大量缓存在Web服务中-也许每隔10秒左右更新一次状态就足够了

编辑:


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

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

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

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

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

在这个场景中,我假设客户机和网桥都将有一个队列,其中将放置已发布的消息,并且它们将根据需要从队列中弹出消息

如果您想实现关于所述的场景,可以使用提供Java和.NET api的应用程序进行发布。这里还有一些关于如何使用它的示例:

希望这有帮助

我在拉皮条:)它是免费的,所以没有钱从中获得