新识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地图