当我第一次发布这个问题时,我的Web服务和应用程序控制器之间有很强的耦合,控制器需要打开多个线程到服务,并且当它接收到数据时,它必须对返回的数据进行大量处理并将其合并到一个数据集.我不喜欢客户端在准备好使用之前必须处理和合并返回的数据这一事实,并希望将该层移动到服务并让服务打开供应商的异步线程并合并结果在将它们返回给客户之前.
我遇到的一个挑战是,我不能等到所有线程完成并且结果合并,我必须开始接收数据,因为它可用.这叫我在服务上实现一个观察者模式,以便在合并新的结果集并准备好使用它并将它们发送到应用程序时通知我的应用程序.
我正在寻找如何使用ASMX webservices或WCF执行此操作,到目前为止,我发现使用WCF实现它,但此线程始终是开放的建议和改进.
好的,我的问题的解决方案来自WCF
除了ASMX Web服务的经典请求 - 回复操作之外,WCF还支持其他操作类型,例如:单向呼叫,双工回叫和流媒体.
不难猜测,双工回调是我想要的.
双工回调只允许服务对客户端进行回叫.在服务器上定义了回调契约,并且客户端需要在每次调用时提供回调端点.然后由服务决定何时以及使用回调引用的次数.
只有支持bidirectiona的绑定才支持回调操作.WCF提供WSDualHttpBinding以支持HTTP上的回调(NetNamedPipeBinding和NetTcpBinding也存在回调支持,因为TCP和IPC协议支持双工通信)
这里需要注意的一件非常重要的事情是双工回调是非标准的纯Microsoft功能.这不会对我当前的任务造成问题,因为我的Web服务和应用程序都在Microsoft ASP.NET上运行
编程WCF服务给了我一个很好的WCF启动.它超过700页,深入研究了所有WCF的概念,并有一个关于回调和其他类型操作的专门章节.
我在网上找到的其他一些好资源是;
Windows Communication Foundation(WCF)截屏视频
MSDN网络广播:Windows Communication Foundation从上到下
网络服务软件工厂
WCF服务工厂