服务合同命名空间:为什么

Vin*_*edi 30 wcf

与指定服务合同的命名空间有点混淆.可以理解正常班级,

我对命名空间的理解

在普通的OOP模型中,说Employee类是Microsoft名称空间以及Google名称空间的一部分.但是,因为我们可能会在我们的项目中添加对谷歌以及微软组装的引用; 因此,当我们说时,区分员工我们有命名空间

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

同样,关于Web服务,它的重要性如何?我可以请一个明确的例子来解释这个案子吗?例如

[ServiceContract(Namespace="Company.Matching.Algo")]
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 38

它被用于 - 就像常规的.NET命名空间一样 - 以保持分离.

拥有命名空间有助于当您拥有多个可能最终暴露出类似方法的服务时.使用命名空间,它们都可以有一个被调用的方法GetVersion或者某个东西,并且WSDL文档将能够根据它们的命名空间将它们分开.

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

  • @inTagger:如果您更喜欢使用版本号 - 那也没关系!在WCF世界中将合同命名空间中的年/月包括在内似乎是一种常见的做法 - 但是没有必要遵守规则! (4认同)
  • 那么为什么不使用v1,v2代替2011/08和2011/12? (2认同)

Dav*_*rke 9

来自RebuildAll:

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