【问题标题】:WCF Service Discovery ScopeWCF 服务发现范围
【发布时间】:2011-03-09 13:10:03
【问题描述】:

场景:

我有几项服务希望被不同的客户发现。执行发现工作正常。但现在由于不同的原因,我拥有这些服务的不同版本。

我的应用程序生命周期中可能有 3 到 4 个不同的层:生产、暂存、测试和开发。

我需要支持我在过去 6 个月内部署的客户端,因此我可能需要同时运行 2 - 3 个版本的服务。不是合约的不同版本,而是实现的版本略有不同。

我可能还需要按服务提供的数据类别来区分服务。假设我有一个提供美国数据的服务实例和另一个提供加拿大数据的实例,可能还有一个提供澳大利亚数据的第三个实例。在某些情况下,服务可能有多个类别。

因此,从客户的角度来看,如果我仅根据合同要求提供服务,我可能会获得 9 到 15 个端点,而我真的只想与美国生产版本 1.1 的一项服务交谈。我知道该服务存在范围,但我未能成功创建一系列范围,以允许我在我的环境中需要的那种灵活性。

在前面的示例中,我正在寻找一项非常具体的服务,但我可能还想查看仅适用于生产的特定合同的所有服务,无论它们是什么国家或版本。我可能还需要在组合中添加额外的“范围”。总的来说,我可能有 4 - 6 个标准被用作“范围”。

问题:

范围是构建这种复杂过滤的正确方法还是我需要做一些自定义的事情?

如果范围是正确的方法,您能指出我可以查看的示例吗?

如果我需要自定义,是否有一种标准方法来扩展“范围”行为,以便我可以欺骗它做我想做的事情?

源代码:

http://nardax.codeplex.com/

【问题讨论】:

    标签: wcf scope service-discovery scope-identity


    【解决方案1】:

    是的,范围是要走的路。我想向您推荐 Juval Lowy(Programming WCF services 书的作者)撰写的一篇很棒的文章 Discover a New WCF with Discovery。这是使用范围的直接引用:

    作用域在 自定义发现并添加 对你的复杂行为 应用程序,尤其是在编写 框架或管理工具。这 范围的经典用途是启用 客户区分 来自不同的多态服务 应用程序。然而,这是 有点罕见。我发现 范围很方便 区分端点类型 相同的应用程序。

    例如,假设对于给定的 合同你有多个 实施。 你有 生产中使用的操作模式 和使用的模拟模式 测试或诊断。使用范围, 客户可以选择 需要正确的实现类型, 不同的客户从不冲突 通过消耗一个彼此 他人的服务。您还可以 让同一个客户拿起一个 基于不同的端点 调用的上下文。你可以 有用于分析的端点, 调试、诊断、测试、 仪器等。

    这非常适合您要解决的问题。

    本文还包含有关在配置和代码中声明范围的好示例。从服务消费者的角度来看,我看到了两个选项:如果您想在发现阶段过滤您的服务,或者您可以获得所有服务和手动检查他们的范围。

    Scope 本身是一个Uri 对象,因此它可以使用“key=value”表示法将许多不同的信息放在那里。这应该负责“扩展”范围过滤,并且不会限制您的前向兼容性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 2020-12-30
      • 2020-04-11
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多