初识WCF6

参考: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,如果您产生VS2010,可以启动VS2010的命令行工具,这样即使可以在其他目录下利用这顺序。

俺们先行押一个例证,就是咱们在前方几乎首被起之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来赢得首批数据。我们现小试牛刀一下,首先打开VS2010命令行:

初始–>所有程序–>Visual Studio
2010–>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来得那么舒心,但是她同VS2010并入,使用起来挺简短,而且当服务发生变化时,只待右击服务引用选择翻新服务就是可重新生载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