Wcf 服务契约名称空间:为什么

Wcf 服务契约名称空间:为什么,wcf,Wcf,为服务契约指定名称空间有点混淆。就一个普通的班级来说可以理解 我对名称空间的理解 在正常的OOPs模型中,假设Employee类是Microsoft名称空间和Google名称空间的一部分。但由于我们可能会在我们的项目中添加对谷歌和微软汇编的引用;因此,为了区分员工的名称空间,当我们说 Employee emp=new Employee()。。。编译器真的不知道我们指的是哪位员工 类似地,对于web服务,它有什么关系?我可以要求一个明确的例子来解释这个案例吗?比如说 [ServiceContrac

为服务契约指定名称空间有点混淆。就一个普通的班级来说可以理解

我对名称空间的理解

在正常的OOPs模型中,假设Employee类是Microsoft名称空间和Google名称空间的一部分。但由于我们可能会在我们的项目中添加对谷歌和微软汇编的引用;因此,为了区分员工的名称空间,当我们说

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

类似地,对于web服务,它有什么关系?我可以要求一个明确的例子来解释这个案例吗?比如说

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

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


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

使用名称空间,就像使用常规的.NET名称空间一样,将事物分开

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

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

来自:

关于名称空间的注意事项:名称空间不是URL!。它们可能看起来像一个,就像在我的示例中一样,但实际上不存在模式这样的子域。名称空间遵循URI格式,但不是实际地址。它们可以用来标识模式,因为通常公司拥有一个域名。因此,将其用作模式名称空间会创建一些独特的内容。而这正是名称空间应该是什么:唯一的


对不起,我没有说清楚。。。我想询问ServiceOperation属性的名称空间属性。[ServiceContract(Namespace=“Company.Matching.Algo”)]开发人员或WCF如何使用它来标识对象?我可以举一些例子吗?那为什么不使用v1、v2而不是2011/08和2011/12呢?@inTagger:如果你更喜欢使用版本号,那也可以!在WCF世界中,在合同名称空间中包含年/月似乎是一种常见的做法,但没有规则规定必须这样做!嗯,有什么方法可以更轻松地配置每个环境?假设您从PC(本地主机)将web服务部署到QA或Dev服务器。。你不希望人们每次更改此项时都必须签订服务合同。e、 g.或者作为一个假设的例子(是个坏名字,但你明白了)@CoffeeAddict:我不会更改每个平台(开发、测试等)的服务名称空间-我只会更改连接到的服务器URL。@marc_感谢你的回答,我试图了解名称空间在服务合同中的工作或角色。我有一个已经被许多客户机部署和使用的服务,而该服务在ServiceContract中没有名称空间。所以现在我的服务中有了版本升级,我添加了这样的版本“”,这意味着我的旧客户端将无法调用我的服务\