上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.1.2 元数据与服务契约
服务契约从某种意义上相当于一种元数据,我们用CLR的程序集(Assembly)进行类比。程序集是一个PE文件,由一个或多个托管模块(Managed Module)组成。从构成上讲,一个程序集由三种类型的成员组成:元数据(Metadata)、中间语言(MSIL)代码和资源(Resource)。元数据可以看成是程序集逻辑结构的描述,它定义了本程序集中所有托管模块、类型、类型成员的结构(定义表),以及它所引用的程序集、类型的结构(引用表)。
元数据使程序集成为真正意义上自描述的,并且是可以单独实施安全策略和版本策略的最小部署单元,因为元数据包含了代码执行所需的所有信息。正因为有元数据的存在,我们可以通过一些代码生成工具通过分析元数据,进而生成代码;元数据也使通过反射进行方法调用成为可能。从交互的角度来看,两个程序集之间的调用是通过引用元数据实现的。
与程序集元数据相似,服务契约也可以看作是对于服务结构的描述,服务的结构就是构成该服务的所有操作集合,以及每个操作的输入与输出。与基于元数据的代码生成相似,当我们通过添加服务引用,或者直接通过SvcUtil.exe这样的代码生成器进行客户端代码生成的时候,服务契约就是重要的元数据。此外,与基于元数据的程序集之间的交互相似,服务的调用也需要依赖服务契约。
对于程序集来说,元数据定义了类型成员(字段成员和方法成员)的结构,而中间代码(MSIL Code)则提供了方法的实现。元数据与中间代码的关系和服务契约与服务实现的关系类似。