【发布时间】:2015-09-10 05:12:44
【问题描述】:
我有一个 WCF 服务(托管在 windows-service 中)和一个客户端。
它们交互如下:客户端发送请求,服务获取它并返回 HTTP 200。客户端还将其地址传递给 WS-Addressing 标头中的答案。暂时就这些了
几个小时后,windows-service 应该会发送该请求的结果。客户有一个可以得到结果的网络方法。所以问题是:将获得结果的客户端方法的描述(方法名称,它的参数)应该在哪里?客户端应该公开它的 WSDL,还是我应该把那个描述放在我的 WSDL 中(如果它是这样工作的)?
【问题讨论】:
-
客户端没有 WSDL - 只有服务。您是否希望客户端在服务发回结果所需的几个小时内保持连接?这不是我认为好的 Web 服务设计。在这几个小时内,可能会发生很多事情会导致断开连接。无论如何,听起来您想要一个双工绑定(用于从服务回调到客户端)。您能否针对您的情况提供更多详细信息和代码示例?
-
当然客户端不会保持连接几个小时。正如我所说,它获得了 HTTP 200,这就是它的请求的结束。客户端有自己的网络方法,其中之一是从我的 WCF 获得答案。那么谁应该负责这个方法的描述,所以我可以调用它?
-
所以客户端本身也是一个服务?至于客户端稍后从服务中获得答案,那应该是客户端调用的服务公开的方法。如果其他客户端正在调用第一个客户端,那么第一个客户端(充当服务)也可以公开一个获取结果的方法。即,服务 A 进行处理。客户端 A(也是服务 B)可以从服务 A 请求结果。客户端 A(充当服务 B)也可以公开客户端 C 可以使用的类似方法。
-
不,客户端不应该调用 WCF 服务来获取结果,因为在这种情况下他会重复调用它(因为他不知道结果是否准备好)。它的 WCF 服务在准备好后立即发送结果。抱歉,我忘了说 WCF 托管在 windows 服务中,所以是 windows-service 将结果发送给客户端。
-
啊。在这种情况下,一种解决方案是让客户端(同样,作为服务和客户端)具有“主”服务可以调用的方法,因此它将位于客户端的 WSDL 中。服务 A(托管 WCF 的 Windows 服务)根据来自客户端的请求进行处理(同样,它本身就充当服务)。然后服务 A 会调用客户端返回结果。这有意义吗?