一步一个脚印学习WCF系列之WCF基础术语—契约的名称与命名空间(二)

   契约的名称

   在默认下契约公开的名称就是定义的接口名或者类名如下面的:IMyContract和MyClass

   [ServiceContract]
 interface IMyContract
 {

 }
 [Service Contract]
 class MyClass
 {
 }

   但是可以为契约定义别名,如下面定义后的别名是:MyServiceContract和MeServcieContract

   举例如下:

   [ServiceContract(Name="MyServiceContract")]
 interface IMyContract
 {

 }
 [Service Contract(Name="MeServiceContract")]
 class MyClass
 {
 }

   为什么要为契约定义别名?

   因为,客户端要调用服务,必须用到元数据(Metadata),而元数据(Metadata)中用别名描述服务,能降低耦合度。如果都用IMyContract作为服务的名称是不就冲突了。

   举例如下:用Name属性

   [ServiceContract(Name="MyServiceContractA")]
 interface IMyContract
 {

 }

   [ServiceContract(Name="MyServiceContractB")]
 interface IMyContract
 {

 }

   契约的命名空间

   默认情况下契约的命名空间是http://tempuri.org,但是可以为契约定义命名空间。对外提供服务的命名空间通常使用公司的URL。

   举例如下:用Namespace属性

   [ServiceContract(Namespace="http://www.mycompany.com.cn/")]
 interface IMyContract
 {

 }

 为什么要为契约定义命名空间?

   契约的命名空间和.NET编程的命名空间具有一样的目的,确定契约的类型范围,降低契约类型的冲突几率。


 

原文地址:https://www.cnblogs.com/menglin2010/p/2023303.html