契约的名称
在默认下契约公开的名称就是定义的接口名或者类名如下面的: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编程的命名空间具有一样的目的,确定契约的类型范围,降低契约类型的冲突几率。