在此个文件中遵循一定的正规化来对Web

参考:http://blog.csdn.net/songyefei/article/details/7397296

元数据交换

经过前两篇的就学,大家领会了WCF通信的风流罗曼蒂克对基本原理,大家知晓,WCF服务端和客商端通过共享元数据(富含服务协定、服务器终结点新闻)在四个终结点上创立通道从而实行通讯。我们经过手写代码(或安排)的办法为服务端编写了元数据音信,未有依据元数据交流就落到实处了通讯。然则在实际上利用中,元数据往往是不菲的,何况再也编写元数据的劳作也是不值得的,由此一定会用到元数据调换的措施让客商端获取元数据,本篇大家就来更为询问一下元数据和元数据调换。

1.
元数据是怎么着提供的

   
大家领悟,元数据包涵了要和服务端实行通讯的具备消息,富含劳动协定接口、服务端终结点地址、绑定等消息,它建议了顾客端应该到哪个地方去探究服务以至哪些调用服务的方方面面线索。不过服务端是怎么样揭橥其元数据的吗?
    答案是行使WSDL文件,WSDL即Web Service Description
Language,Web服务描述语言,它是三个XML文件,在这里个文件中遵从一定的正式来对Web
Service举行描述,他是符合W3C标准的,因为WCF是被设计为供分化平台调用的服务框架,所以顾客端恐怕是非微软平台的,比如Java什么的。由此WCF必得接受WSDL这种国际规范的描述方法来汇报服务能力被众多的阳台所访问。

 

2.
元数据交流的进程是怎么的

在WCF服务端的运行时,有黄金年代组类库任何时候等候命令把劳动的元数据输出为WSDL描述提供给央浼者,只要有客户端根据服务端约定的方法来央浼元数据,服务端立时将服务运营时意况写成WSDL文件提供。顾客端获得的实在正是WSDL文件(还会有一点点框架描述文件XSD),顾客端得到文件后再使用自个儿的主意来解读WSDL,把她翻译成顾客端可用的源代码或安插文件,当时客商端就得到了劳务的编制程序模型,通过有个别代理类,客商端依旧足以像调用本地对象同样选拔WCF服务。

 

进而全体经过是那般:顾客端向服务端诉求元数据交换–>服务端运转时将元数据编写成WSDL文件提供–>顾客端获得文件–>客商端翻译文件–>客商端依据翻译结果生费用地类代码和布局–>客户端得到劳动的本地编制程序模型。那就是元数据调换的历程。

  1. 获得WSDL

在微软平桃园,有三种格局来拓宽元数据沟通,第一是应用劳务援引,第二是利用元数据实用工具(svcutil.exe)来进展,我们先读书那一个工具。

那个工具得以在Windows
SDK中找到,具体地点为 C:\Program Files\Microsoft
SDKs\Windows\v6.0\Bin,借使你有VS二零零六,能够运维VS二〇一〇的命令行工具,那样就能够在其余目录下行使那么些顺序。

作者们先看叁个事例,正是我们在前几篇中确立的IIS服务HelloWCFService,它被自身住宿在IIS中。

源代码如下(HelloWCF.cs):

using System;  
using System.ServiceModel;  

namespace LearnWCF  
{  
    [ServiceContract]  
    public interface IHelloWCF  
    {  
        [OperationContract]  
        string HelloWCF();  
    }  

    public class HelloWCFService : IHelloWCF  
    {  
        public string HelloWCF()  
        {  
            return "Hello WCF!";  
        }  
    }  
} 

布局文件(web.config)如下:

    <configuration>  
      <system.serviceModel>  
        <services>  
          <service name="LearnWCF.HelloWCFService" behaviorConfiguration="metadataExchange">  
            <endpoint address="" binding="wsHttpBinding" contract="LearnWCF.IHelloWCF"/>  
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>  
          </service>  
        </services>  
        <behaviors>  
          <serviceBehaviors>  
            <behavior name="metadataExchange">  
              <serviceMetadata httpGetEnabled="true"/>  
            </behavior>  
          </serviceBehaviors>  
        </behaviors>  
      </system.serviceModel>  
    </configuration>  

在浏览器中输入服务地点会如下图所示:

图片 1

观看系统提示的那行命令了么?系统在报告我们什么选择svcutil.exe来赢得元数据。我们几日前试一下,首先张开VS二〇〇八命令行:

起来–>全部程序–>Visual Studio
二零一零–>Visual Studio Tools–>Visual Studio命令行提示

图片 2

 

 图片 3

 

我们导航到三个目录下考虑获得元数据文件。

笔者们权且不固守浏览器提要求大家的章程做,因为遵照那些形式做就把获得WSDL和翻译WSDL为客户端代码合在一块儿了,大家先获得WSDL元数据文件,看看它是如何体统的。我们按如下的下令做:

svcutil.exe /t:metadata http://localhost/iisservice/hellowcfservice.svc?wsdl  

咱俩走入了叁个参数/t:metadata
表示只输出元数据,不调换代码。命令的施行进度如下:

图片 4

能够看看变化了3个文本,富含多少个架构文件和三个WSDL文件,这么些正是劳务端元数据的叙说了,全部的客商端央求到的其实都以那一个文件。WSDL的规范相当多,关于它的原委,大家现在再进行来看,然则大约的开荒看一下就能够来看某些与服务协定、绑定、操作那么些事物有关的地点。

  1. 翻译WSDL文件

WSDL是一个XML文件,其实就是个公文文件,顾客端必得将其依照本人的平台湾特务色把他翻译开销地代码文件来使用。svcutil当然会提供那么些职能。在wsdl文件所在目录下利用如下的通令就能够把WSDL文件翻译资金地代码文件:

 svcutil *.wsdl *.xsd

以管窥天,正是依据当前目录下的具备的WSDL文件和XSD文件来生成顾客端代码文件。进程会是那样

图片 5

能够看到,生成了贰个cs文件和多少个布置文件,这几个正是基于WSDL文件翻译成的客商端代码文件了。展开来探访,一定不生分,正是运用ClientBase<>来生成一个顾客端代理类并把终结点的新闻配置在了.config文件里。把那多少个文件包含在客商端的连串中并把output.config改成app.config就足以了。

  1. 越来越好地使用元数据调换工具

事先大家询问了利用svcuitl.exe来得到WSDL并翻译成客商端代码的进度。实际上这两步能够合二为风华正茂。直接施行上边包车型地铁授命能够向来拿走客商端文件:

svcutil.exe http://localhost/iisservice/hellowcfservice.svc?wsdl

这么它就不会生成WSDL而一直生成客商端文件了。

唯独依照那样的办法调换的文件或然不太切合大家的渴求,我们得以加上有的参数来钦赐大家输出的文本名:

svctuil.exe /out:ClientProxy.cs /config:app.config http://localhost/iisservice/hellowcfservice.svc?wsdl 

那般输出的文本大家就能够直接包罗在客商端项目中选拔了。

  1. 应用劳务援用

骨子里使用服务援用跟使用svcutil.exe生成的客商端模型是同样的,可是服务援引保留了WSDL文件(以至部分相关的七七八八的文书),未有svcutil.exe来得那么舒服,但是它跟VS二零一零合少年老成,使用起来很简短,而且当服务爆发变化时,只须求右击服务援引选取翻新服务就足以重新下载WSDL了

 

  1. 实行一丝丝

 

用作服务端,公开元数据是内需配备的,不一样的配备会以致元数据了然的不二等秘书籍各异。

 

大家要铭记,WCF服务端公开元数据必需持有两个尺码:

 

(1) 为服务增多ServiceMetadata行为。

 

(2) 张开元数据沟通终结点。

 

双方必不可少。

 

WCF的驾驭元数据的手腕首要有二种:

 

第一种:通过HTTP GET方法。

 

这正是在前文中大家看见的章程,大家得以应用HTTP
Get的措施来收获WSDL文件即在劳务地址.svc后边跟上?wsdl的不二法门直接伸手到WSDL文件。大家得以向来在浏览器中输入服务端地址.svc?wsdl,浏览器就一贯获得了WSDL文件并为我们展示出来了。

图片 6

 

再有相应的框架描述文件(XSD)

 图片 7

举例想利用这种元数据了解办法,必须安插服务的ServiceMetadata行为,并点名httpGetEnabled

“true”,而元数据通晓终结点不必配置,系统会自动配置二个,配置文件的写法如下:

    <configuration>  
      <system.serviceModel>  
        <services>  
          <service name="LearnWCF.HelloWCFService" behaviorConfiguration="metadataExchange">  
            <endpoint address="" binding="wsHttpBinding" contract="LearnWCF.IHelloWCF"/>  
          </service>  
        </services>  
        <behaviors>  
          <serviceBehaviors>  
            <behavior name="metadataExchange">  
              <serviceMetadata httpGetEnabled="true"/>  
            </behavior>  
          </serviceBehaviors>  
        </behaviors>  
      </system.serviceModel>  
    </configuration>  

在这种布局下,访问元数据的措施是探访上面包车型大巴地点:

http://localhost/iisservice/hellowcfService.svc?wsdl 

其次种:通过MEX元数据沟通终结点。

在这里种方式下,大家第后生可畏要确认保证服务具有ServiceMetadata行为,然则httpGetEnabled能够没有要求为true。别的大家还亟需为劳动显式地丰硕叁个终结点,这个终结点之处、绑定和签定都是点名的我们无法改造

<endpoint address=”mex” binding=”mexHttpBinding” contract=”IMetadataExchange” /> 

布局文件的写法如下:

    <configuration>  
      <system.serviceModel>  
        <services>  
          <service name="LearnWCF.HelloWCFService" behaviorConfiguration="metadataExchange">  
            <endpoint address="" binding="wsHttpBinding" contract="LearnWCF.IHelloWCF"/>  
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>  
          </service>  
        </services>  
        <behaviors>  
          <serviceBehaviors>  
            <behavior name="metadataExchange">  
              <serviceMetadata />  
            </behavior>  
          </serviceBehaviors>  
        </behaviors>  
      </system.serviceModel>  
    </configuration>  

倘若按这种布局,大家必需依据如下地址来访谈公开的元数据:

http://localhost/iisservice/hellowcfservice.svc/mex

潜心,由于还未有拉开HTTP
GET,大家不能够在浏览器中一贯输入那个地方来获取WSDL了(会唤醒400不当),大家必得经过svcutil.exe或加上服务援用的法子来做客。

接纳svcutil.exe或劳务援用的时候能够不珍视元数据通晓方法是HTTP
GET依旧Mex,他们会活动搜索到切合的不二法门,只需求把劳务的svc文件地方输入就足以了,但是我们应有驾驭,这两种元数据通晓的法子是有分别的。

  1. 总结

透过前不久的读书,大家特别精晓了WCF元数据的和元数据沟通的原理。固然我们在实质上中国人民解放军海军事工业程高校业程中都会同一时候应该利用元数据调换工具来帮忙提升功效,可是那背后产生的兼具环节也是大家应该通晓的。

连带能源

MSDN关于Svcutil.exe用法的文书档案

http://msdn.microsoft.com/zh-cn/library/aa347733.aspx

 

相关文章