在这个文件中按一定的标准来针对Web于此文件中遵循一定的科班来针对Web

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

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

首数据交换

首数据交换

通过前片篇之求学,我们询问了WCF通信的局部基本原理,我们解,WCF服务端和客户端通过合享元数据(包括劳动协定、服务器终结点信息)在片单终结点上建立通道从而进行通信。我们经过手写代码(或布)的方为服务端编写了首届数据信息,没有因元数据交换就实现了通信。然而当实际利用被,元数据往往是成百上千的,而且更修元数据的劳作为是休值得的,因此一定会用到第一数据交换的方法让客户端获取元数据,本篇我们尽管来尤其询问一下初数据和元数据交换。

透过前片篇之就学,我们了解了WCF通信的片段基本原理,我们理解,WCF服务端和客户端通过并享元数据(包括劳动协定、服务器终结点信息)在简单单终结点上建立通道从而进行通信。我们经过手写代码(或布)的法子为服务端编写了首数据信息,没有因元数据交换就实现了通信。然而当实际行使中,元数据往往是群的,而且重修元数据的劳作为是匪值得的,因此一定会用到正数据交换的道让客户端获取元数据,本篇我们尽管来更是询问一下首先数据和元数据交换。

1.
最先数据是哪些提供的

1.
老大数据是什么样提供的

   
我们懂得,元数据包括了使跟服务端进行通信的富有消息,包括服务协定接口、服务端终结点地址、绑定等消息,它指出了客户端应该到哪儿去寻找服务及怎样调用服务之全线索。但是服务端是哪些公布其首先数据的也罢?
    答案是使用WSDL文件,WSDL即Web Service Description
Language,Web服务描述语言,它是一个XML文件,在斯文件被遵循一定之正式来针对Web
Service进行描述,他是相符W3C标准的,因为WCF是吃规划也罢供不同平台调用的劳动框架,所以客户端可能是不微软平台的,比如Java什么的。因此WCF必须动WSDL这种国际标准的叙述道来讲述服务才会为很多底平台所访问。

   
我们知道,元数据包括了若与劳务端进行通信的持有消息,包括劳动协定接口、服务端终结点地址、绑定等信息,它指出了客户端应该到哪儿去探寻服务以及哪些调用服务的整线索。但是服务端是何许公布该元数据的吧?
    答案是行使WSDL文件,WSDL即Web Service Description
Language,Web服务描述语言,它是一个XML文件,在是文件被仍一定的业内来对Web
Service进行描述,他是可W3C标准的,因为WCF是深受设计也罢供不同平台调用的劳动框架,所以客户端可能是无微软平台的,比如Java什么的。因此WCF必须动WSDL这种国际标准的讲述道来讲述服务才会于众多底阳台所访问。

 

 

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

2.
元数据交换的经过是怎么样的

以WCF服务端的运行时,有同等组类库随时待命把劳务之排头数据输出为WSDL描述提供被请求者,只要发生客户端按照服务端约定的不二法门来要求元数据,服务端立即将服务运作时状态写照成WSDL文件提供。客户端取的骨子里就是WSDL文件(还有一些框架描述文件XSD),客户端将到文件后再行采取自己的法门来解读WSDL,把他翻成客户端可用之源代码或布文件,这时客户端就拿走了劳务之编程模型,通过有些代理类,客户端还是可以像调用本地对象同采用WCF服务。

于WCF服务端的运转时,有同样组类库随时待命把劳动的头条数据输出为WSDL描述提供给请求者,只要出客户端按照服务端约定的章程来求求元数据,服务端立即将服务运行时状态写照成WSDL文件提供。客户端取的实际上就是是WSDL文件(还有一对框架描述文件XSD),客户端将到文件后还下好的不二法门来解读WSDL,把他翻成客户端可用的源代码或部署文件,这时客户端就抱了服务的编程模型,通过有代理类,客户端还是可像调用本地对象同以WCF服务。

 

 

从而整个过程是这样:客户端向服务端请求元数据交换–>服务端运行时拿正数据编写成WSDL文件提供–>客户端取文件–>客户端翻译文件–>客户端根据翻译结果大本地类代码和安排–>客户端取劳动的本土编程模型。这就是是首届数据交换的经过。

故所有过程是如此:客户端向服务端请求元数据交换–>服务端运行时以首届数据编写成WSDL文件提供–>客户端取文件–>客户端翻译文件–>客户端根据翻译结果非常本地类代码和布局–>客户端取劳动的当地编程模型。这即是最先数据交换的过程。

  1. 获得WSDL
  1. 获得WSDL

当微软平台被,有点儿种植艺术来拓展首数据交换,第一凡运服务引用,第二是用初数据实用工具(svcutil.exe)来进展,我们先行学是家伙。

每当微软平台受到,有些许种办法来进行第一数据交换,第一是使用服务引用,第二凡是应用初数据实用工具(svcutil.exe)来展开,我们先行上之家伙。

其一家伙得以当Windows
SDK中找到,具体位置为 C:\Program Files\Microsoft
SDKs\Windows\v6.0\Bin,如果您产生VS2010,可以启动VS2010之命令行工具,这样就算可以另外目录下用是序。

斯家伙得以于Windows
SDK中找到,具体位置为 C:\Program Files\Microsoft
SDKs\Windows\v6.0\Bin,如果你发VS2010,可以启动VS2010底命令行工具,这样就算得当其余目录下以是序。

我们先押一个例子,就是咱当面前几篇中树立之IIS服务HelloWCFService,它被自己留宿在IIS中。

我们先押一个例证,就是咱在前方几乎首被确立之IIS服务HelloWCFService,它于自己留宿在IIS中。

源代码如下(HelloWCF.cs):

源代码如下(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!";  
        }  
    }  
} 
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)如下:

布文件(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>  
    <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

图片 2

相网提示的那行命令了么?系统在报告我们怎么样使svcutil.exe来取正数据。我们今天摸索一下,首先打开VS2010命令行:

探望网提醒的那么行命令了么?系统以报我们怎样行使svcutil.exe来获得正数据。我们本摸索一下,首先打开VS2010命令行:

开班–>所有程序–>Visual Studio
2010–>Visual Studio Tools–>Visual Studio命令行提示

千帆竞发–>所有程序–>Visual Studio
2010–>Visual Studio Tools–>Visual Studio命令行提示

图片 3

图片 4

 

 

 图片 5

 图片 6

 

 

我们导航及一个索引下准备取首数据文件。

咱们导航及一个目下准备取首届数据文件。

我们少未循浏览器提供给我们的艺术做,因为本老方式做就是把获得WSDL和翻译WSDL为客户端代码合在一起了,我们先获得WSDL元数据文件,看看她是啊体统的。我们按如下的授命做:

我们小未依照浏览器提供被我们的方做,因为本老方式做就是管获得WSDL和翻译WSDL为客户端代码合在一起了,我们先抱WSDL元数据文件,看看它是啊法的。我们随如下的吩咐做:

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

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

俺们在了一个参数/t:metadata
表示无非输出元数据,不转代码。命令的实践过程如下:

咱们在了一个参数/t:metadata
表示仅输出元数据,不扭转代码。命令的实行过程如下:

图片 7

图片 8

足见到变化了3个文本,包括个别个架构文件和一个WSDL文件,这些就是是劳动端元数据的讲述了,所有的客户端请求到之莫过于还是者文件。WSDL的正统比较多,关于其的始末,我们今后更进行来拘禁,不过大概的打开看一下哪怕能观看有些跟劳动协定、绑定、操作这些东西有关的地方。

得视变化了3单文件,包括个别只架构文件与一个WSDL文件,这些虽是劳务端元数据的描述了,所有的客户端请求到的骨子里还是这个文件。WSDL的正儿八经比较多,关于它的情,我们之后再也拓展来拘禁,不过大概的打开看一下就能看有些暨劳动协定、绑定、操作这些事物有关的地方。

  1. 翻译WSDL文件
  1. 翻译WSDL文件

WSDL是一个XML文件,其实就是个文件文件,客户端必须用那个按好的平台特色将他翻成本地代码文件来使。svcutil当然会供者意义。在wsdl文件所在目录下利用如下的下令就好将WSDL文件翻译成本地代码文件:

WSDL是一个XML文件,其实就是独公文文件,客户端必须以该据自己的阳台特色把他翻成本地代码文件来行使。svcutil当然会供者功效。在wsdl文件所在目录下采取如下的命就可以管WSDL文件翻译成本地代码文件:

 svcutil *.wsdl *.xsd

 svcutil *.wsdl *.xsd

顾名思义,就是因当前目录下之有着的WSDL文件与XSD文件来特别成客户端代码文件。过程会是这般

顾名思义,就是因当前目录下的保有的WSDL文件及XSD文件来好成客户端代码文件。过程会是这样

图片 9

图片 10

得视,生成了一个cs文件及一个布置文件,这些虽是因WSDL文件翻译成的客户端代码文件了。打开来看看,一定非生,就是运用ClientBase<>来深成一个客户端代理类并将终结点的消息配置当了.config文件里。把这点儿只文件包含在客户端的门类遭到并拿output.config改化app.config就得了。

得看来,生成了一个cs文件及一个部署文件,这些就是冲WSDL文件翻译成的客户端代码文件了。打开来瞧,一定非生疏,就是用ClientBase<>来很成一个客户端代理类并拿终结点的音信配置在了.config文件里。把立即半只公文包含在客户端的品种中并把output.config改化app.config就好了。

  1. 复好地应用初数据交换工具
  1. 再度好地采用初数据交换工具

事先我们询问了下svcuitl.exe来获取WSDL并翻译成客户端代码的过程。实际上就片步可同二乎同样。直接执行下的指令可以一直拿走客户端文件:

之前我们询问了用svcuitl.exe来获得WSDL并翻译成客户端代码的历程。实际上就点儿步可齐二啊同样。直接实施下的指令可以直接获得客户端文件:

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

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

这样它就是不会见生成WSDL而一直生成客户端文件了。

然它就是未会见生成WSDL而一直扭转客户端文件了。

然依照这样的计变的公文或者未顶相符我们的要求,我们得加上有参数来指定我们输出的公文称:

可是按照这样的法子转变的文本或者未太相符我们的要求,我们好增长一些参数来指定我们输出的文书称:

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

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

如此这般输出的公文我们虽得一直包含在客户端项目中采取了。

这么输出的文本我们尽管足以一直包含在客户端项目受到利用了。

  1. 使劳务引用
  1. 动劳务引用

实则用劳务引用和用svcutil.exe生成的客户端模型是同一的,不过服务引用保留了WSDL文件(以及一些有关的七七八八的文书),没有svcutil.exe来得那么舒服,但是它们跟VS2010合一,使用起来非常简单,而且当服务发生变化时,只待右击服务引用选择翻新服务就是得再生载WSDL了

骨子里以劳务引用和用svcutil.exe生成的客户端模型是同样的,不过服务引用保留了WSDL文件(以及有息息相关的七七八八之文本),没有svcutil.exe来得那舒心,但是它和VS2010集成,使用起来颇简短,而且当服务发生变化时,只需要右击服务引用选择创新服务就可更生载WSDL了

 

 

  1. 进行一点点
  1. 进行一点点

 

 

作服务端,公开元数据是急需配备的,不同之部署会造成元数据明白之方法各异。

作服务端,公开元数据是用安排的,不同的配备会造成元数据明白之主意各异。

 

 

我们设切记,WCF服务端公开元数据必须备简单单原则:

俺们只要铭记在心,WCF服务端公开元数据必须有所简单个规格:

 

 

(1) 为服务添加ServiceMetadata行为。

(1) 为服务添加ServiceMetadata行为。

 

 

(2) 打开元数据交换终结点。

(2) 打开元数据交换终结点。

 

 

彼此不可或缺。

二者缺一不可。

 

 

WCF的明元数据的一手主要发生一定量种植:

WCF的当众元数据的手段要出少种植:

 

 

第一种:通过HTTP GET方法。

第一种:通过HTTP GET方法。

 

 

就就是于前文中我们看来的计,我们得以采取HTTP
Get的艺术来获得WSDL文件就于服务地址.svc后面与达到?wsdl的方式直接求到WSDL文件。我们可以一直当浏览器被输入服务端地址.svc?wsdl,浏览器就径直获取了WSDL文件并为我们来得出了。

眼看便是当前文中我们来看底法,我们可使用HTTP
Get的道来博取WSDL文件就于服务地址.svc后面和达到?wsdl的艺术直接呼吁到WSDL文件。我们好直接当浏览器被输入服务端地址.svc?wsdl,浏览器就径直得到了WSDL文件并为我们展示出来了。

图片 11

图片 12

 

 

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

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

 图片 13

 图片 14

若果想以这种元数据明白方式,必须配备服务之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

 

倘若想采取这种元数据明白方法,必须配备服务的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

 

相关文章