与为服务合同指定命名空间相混淆。可以理解正常班级,
我对命名空间的理解
在普通的OOP模型中,说Employee类是Microsoft名称空间以及Google名称空间的一部分。但是,因为我们可能会在我们的项目中添加对谷歌以及微软组装的引用;因此,当我们说
时,要区分Employee,我们有命名空间 Employee emp = new Employee()
...编译器真的不知道我们指的是哪个员工?
同样,关于Web服务,它如何重要?我可以请一个明确的例子来解释这个案子吗?例如
[ServiceContract(Namespace="Company.Matching.Algo")]
答案 0 :(得分:35)
它被用来 - 就像常规的.NET命名空间一样 - 让事情分开。
拥有命名空间有助于当您拥有多个可能最终暴露出类似方法的服务时。使用命名空间,它们都可以有一个名为GetVersion
的方法,而WSDL文档将能够根据它们的命名空间将它们分开。
此外,名称空间通常用于版本控制,因此您的第一个WCF服务可能具有http://yourcompany.com/MyService/2011/08
的服务名称空间,并且有五种方法。如果您稍后介绍了可能有10个方法的服务v2,并将其放入http://yourcompany.com/MyService/2011/12
的单独命名空间中,那么您可以将这些内容分开 - 而“旧”客户端仍然可以调用“旧的“服务与(/2011/08
)并使用其方法,而新客户可以使用更多功能调用新服务。
答案 1 :(得分:7)
来自RebuildAll:
关于命名空间的说明:命名空间不是URL!它们可能看起来像一个,就像我的例子中一样,但实际上并没有这样的子域名。命名空间遵循URI格式,但不是实际地址。它们可用于识别模式,因为通常公司拥有域名。因此,使用它作为模式名称空间创建一些独特的东这正是名称空间应该是什么:唯一。
答案 2 :(得分:4)
命名空间对于序列化和反序列化对象非常重要。
在您的示例中,您可以在服务器和客户端上拥有相同的Employee类,并通过Web服务将Employee对象从一个发送到另一个。如果名称空间不同,则在对其他名称进行反序列化时将为null。