【发布时间】:2017-04-09 06:40:40
【问题描述】:
是否可以在运行时将操作合约添加到休息服务?
例如,我们有一个在端点下可用的服务:www.mywebsite.com 已经有一个 operationContract:getName。
但现在我想在运行时添加两个额外的 operationContract:比如 getAdress 和 GetNumber。
【问题讨论】:
标签: asp.net .net rest wcf restful-architecture
是否可以在运行时将操作合约添加到休息服务?
例如,我们有一个在端点下可用的服务:www.mywebsite.com 已经有一个 operationContract:getName。
但现在我想在运行时添加两个额外的 operationContract:比如 getAdress 和 GetNumber。
【问题讨论】:
标签: asp.net .net rest wcf restful-architecture
主要问题是如何让客户了解新的服务合同。 我认为您可以通过创建 ServiceHost 实例在运行时添加新的服务端点。服务将监听一些不同的地址。这些端点将使用不同的服务合同(接口)。 我认为您不会动态地构建和实现接口(但您可以在.net 中)。您可能会使用一些预定义的接口。在这种情况下,您应该以某种方式通知客户有关新服务合同和地址的信息。要传递和使用此类元数据,您可以:
1) 使用某些“静态”维护服务的双工方法(服务到客户端调用方向) - 以自定义格式将服务元数据提供给客户端;
2) 使用定期客户端调用(轮询)此维护服务 - 出于相同目的;
3) 使用定期网络扫描(按地址范围)并解析 wsdl 以在运行时构建客户端代理。您可以在运行时运行“svcutil /sc ...”来生成代码或使用自定义技术(this 或 this 可以提供帮助);
4) 使用中间服务来编排服务和客户端(复杂但强大的方法,this 可以提供帮助);
5) 另外使用wcf discovery(也不是一个简单的方法);
6) 结合使用这些方法。
附言您可以使用一个接口,但在服务支持(实现)某种方法时通知客户端。这将是最简单的方法。
【讨论】: