初认识WCF6初识WCF6

参考: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

 

admin

网站地图xml地图