一步一个脚印学习WCF系列之WCF概要—生成元数据与代理(五)
阅读目录
一:契约与元数据
二:服务描述与元数据
一:契约与元数据
. 客户端与服务端之间共享的应该是Contract契约而不是代码,就是前面我们讲的文章“一步一个脚印学习WCF之WCF概要—WCF服务的创建与调用HelloWorld实例,通过编码方式(四)”一文中的IHelloWorldService,它与其他分布式技术最显著的区别是耦合性是基于契约的,不是基于代码的耦合,由于在契约中不包含具体的逻辑,这样的话为我们构建松耦合的分布式应用程序提供了良好的基础
. Web Service Description Language(WSDL)
Web Service的描述语言WSDL里面包含了下面的5个内容,这5个方面的内容是我们在进行数据通信的时候必须需要的内容
-互操作契约
就是我们前面介绍的ABC里面的C
-描述服务和相应的Endpoint端点
就是我们前面介绍的ABC里面的A
-Bingding绑定
就是我们前面介绍的ABC里面的B
-消息和类型的定义
-策略
在进行消息传递的时候,要应用哪些具体的策略,都是由WSDL来进行描述的
. 用于生成客户端的代理和配置
在前面的那个Demo,我们的契约以及服务相应的代码都是用手动的方式来完成的,实际上像客户端的代理和一些配置具体的代码可以通过相应的向导来生成的
二:服务描述与元数据
由契约和元数据还是用于生成客户端的代理和响相应的配置的,前面我们讲的文章“一步一个脚印学习WCF之WCF概要—WCF服务的创建与调用HelloWorld实例,通过编码方式(四)”一文中服务相应的代码都是通过编码实现的,事实上像客户端的代理和配置里面具体的代码我们实际上可以通过向导来生成
1:生成服务描述
看图一,在ServiceHost里面运行着服务以及相应的端点,ServiceHost里面又多了一个东西是ServiceDescription服务描述,也就是Service具体的描述,由这个Service具体的描述它把Serivce和Endpoint以及相关的ABC信息在这里面进行了相应的记录,外面是有一个Config文件,当ServiceHost启动的时候来加载这个Config文件,根据Config文件里面具体的内容来生成相应的描述信息
图一
2:生成WSDL
看图二,由ServiceDescription服务描述来生成WSDL的文件,通过svcutil.exe这个工具来生成相应的在客户端所使用的这个Proxyl代理以及相应Channel通道的配置以及相应的代码,同样在客户端我们可以通过Config配置文件的方式来影响Proxyl代理以及Channel通道的生成
图二
3:元数据的交换
在完成了图二阶段,我们可以通过svcutil.exe这个工具来实现从Service服务这一端到Client客户这一端元数据的交换,整个的服务描述与元数据的交互就是图三的这个结构,从这个结构图我们可以看到,Client客户端它在获取Service服务具体的信息时候,实际上它不会直接与Service或者Endpoint来进行接触的,Client客户端它在获取Service或者Endpoint这些具体的信息的时候,它是通过ServiceDescription服务描述来获得的并且通过元数据交互的这种方式来得到相应的信息,然后来构建客户端自己的Proxyl代理,那么通过这种方式我们也会发现如果现在我们的Service或者Endpoint内部的一些逻辑发生变化的话,只要它不影响ServiceDescription服务描述,就不会对客户端的Proxyl代理产生影响,同样也就不会对客户端来产生影响,这样的话通过这种方式实现了Client端和ServiceHost端的松耦合的关系
![](https://images.cnblogs.com/cnblogs_com/menglin2010/第一章WCF概要/ServiceAndMetal-3.jpg)