【问题标题】:Service Contract Namespace : Why服务合同命名空间:为什么
【发布时间】:2011-09-09 15:30:59
【问题描述】:

有点混淆为服务合同指定命名空间。就普通的课能看懂,

我对命名空间的理解

在正常的 OOP 模型中,假设 Employee 类是 Microsoft 命名空间以及 Google 命名空间的一部分。但是因为我们可能会在我们的项目中添加对 Google 和 Microsoft 程序集的引用;因此为了区分 Employee 的我们有命名空间,因为当我们说

Employee emp = new Employee()...编译器真的不知道我们指的是哪个员工?

同样,关于 Web 服务,这有什么关系?我可以要求一个明确的例子来解释这个案例吗?例如

[ServiceContract(Namespace="Company.Matching.Algo")]

【问题讨论】:

    标签: wcf


    【解决方案1】:

    它被用来 - 就像常规的 .NET 命名空间一样 - 将事物分开。

    当您有多个服务可能最终都暴露了相似的方法时,拥有一个命名空间会有所帮助。有了命名空间,它们都可以有一个名为GetVersion 之类的方法,WSDL 文档将能够根据它们的命名空间将它们分开。

    此外,命名空间通常用于版本控制,因此您的第一个 WCF 服务可能具有http://yourcompany.com/MyService/2011/08 的服务命名空间并有五个方法。如果您稍后介绍您的服务的 v2,它可能有 10 个方法,并且您将它放入一个单独的命名空间 http://yourcompany.com/MyService/2011/12,那么您可以将这些东西分开 - 并且“旧”客户端仍然可以调用“旧”服务与 (/2011/08) 并使用其方法,而新客户已经可以调用具有更多功能的新服务。

    【讨论】:

    • 那为什么不使用 v1、v2 而不是 2011/08 和 2011/12 呢?
    • @inTagger:如果您更喜欢使用版本号 - 那也可以!在 WCF 世界的合同命名空间中包含年/月似乎是一种常见的做法 - 但没有规定您必须这样做!
    • hmm 有什么方法可以更轻松地为每个环境进行配置吗?假设您将 Web 服务从您的 PC(本地主机)部署到您的 QA 或开发服务器。您不希望人们每次更改时都必须进入服务合同。例如myCompany.qaservermycompany.Production 只是假设的例子(是的,名字不好,但你明白了)
    • @CoffeeAddict:我不会更改每个平台(开发、测试等)的服务命名空间 - 我只会更改我连接到的 服务器 URL
    • @marc_s 感谢您的回答,我试图了解命名空间在 ServiceContract 中的工作或角色。我有一个已经被许多客户部署和使用的服务,并且该服务在 ServiceContract 中没有命名空间。所以现在我在我的服务中进行了版本升级,我添加了这样的版本“tempuri.org/V2.0.0”所以这意味着我的旧客户端将无法调用我的服务?\
    【解决方案2】:

    来自RebuildAll

    关于命名空间的说明:命名空间不是 URL!它们可能看起来像一个,就像在我的示例中一样,但实际上不存在模式这样的子域。命名空间遵循 URI 格式,但不是实际地址。它们可用于识别模式,因为通常公司拥有域名。因此,使用它作为模式命名空间会创建一些独特的东西。这正是命名空间应该是的:唯一的。

    【讨论】:

      【解决方案3】:

      命名空间对于序列化和反序列化对象很重要。

      在您的示例中,您可以在服务器和客户端上拥有相同的 Employee 类,并通过 Web 服务将 Employee 对象从一个发送到另一个。如果命名空间不同,则在另一侧反序列化时将为 null。

      【讨论】:

      • 抱歉没有明确说明...我想询问 ServiceOperation 属性的命名空间属性。 [ServiceContract(Namespace="Company.Matching.Algo")] 开发人员或 WCF 如何使用它来识别对象?请问我可以举一些例子吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多