一:契约与元数据
.客户端与服务端之间共享的应该是Contract契约而不是代码
客户端与服务端之间所共享的或者所耦合的信息应该是Contract契约,就是之前提到的interface,它与其他的分布式的技术最显著的区别是基于Contract的耦合而不是基于代码的耦合,由于在契约当中不包含具体的服务逻辑,它能够为我们构建这种松耦合的分布式应用程序的提供了一个非常良好的基础。
.Web Service Description Language(WSDL)
Web Service的描述语言WSDL里面包含了下面的5个内容,这5个方面的内容是我们在进行数据通信的时候必须需要的内容。
-互操作契约
-描述服务和相应的Endpoint端点
-Bingding绑定
-消息和类型的定义
-策略
.用于生成客户端的代理和配置
在前面的那个Demo,我们的契约以及服务相应的代码都是用手动的方式来完成的,实际上像客户端的代理和一些配置具体的代码可以通过相应的向导来生成的。
二:服务描述与元数据
看图一在ServiceHost里面运行着服务以及相应的端点,ServiceHost里面又多了一个东西是ServiceDescription服务描述,也就是Service具体的描述,由这个Service具体的描述它把Serivce和Endpoint以及相关的ABC信息在这里面进行了相应的记录,外面是有一个Config文件,当ServiceHost启动的时候来加载这个Config文件,根据Config文件里面具体的内容来生成相应的描述信息。
图一
看图二由ServiceDescription服务描述来生成WSDL的文件,通过svcutil.exe这个工具来生成相应的在客户端所使用的这个Proxyl代理以及相应Channel通道的配置以及相应的代码,同样在客户端我们可以通过配置文件的方式来影响Proxyl代理以及Channel通道的生成。
图二
在完成了图二阶段,我们可以通过svcutil.exe这个工具来实现从Service服务这一端到Client客户这一端元数据的交换,整个的服务描述与元数据的交互就是图三的这个结构,从这个结构图我们可以看到,Client客户端它在获取Service服务具体的信息时候,实际上它不会直接与Service或者Endpoint来进行接触的,Client客户端它在获取Service或者Endpoint这些具体的信息的时候,它是通过ServiceDescription服务描述来获得的并且通过元数据交互的这种方式来得到相应的信息,然后来构建客户端自己的Proxyl代理,那么通过这种方式我们也会发现如果现在我们的Service或者Endpoint内部的一些逻辑发生变化的话,只要它不影ServiceDescription服务描述,就不会对客户端的Proxyl代理产生影响,同样也就不会对客户端来产生影响,这样的话通过这种方式实现了Client端和ServiceHost端的松耦合的关系。
图三