初识WCF6

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

元数据交流

透过前两篇的就学,大家通晓了WCF通讯的局地基本原理,我们领略,WCF服务端和客户端通过分享元数据(饱含服务协定、服务器终结点消息)在两个终结点上树立通道进而实行通讯。我们由此手写代码(或安插)的主意为服务端编写了元数据消息,未有依靠元数据交换就兑现了通讯。不过在实际利用中,元数据往往是无数的,并且再也编写元数据的办事也是不值得的,因而一定会用到元数据沟通的艺术让客户端获取元数据,本篇大家就来更是理解一下元数据和元数据沟通。

1.
元数据是何等提供的

   
咱们知晓,元数据包含了要和服务端举行通信的具有音讯,满含服务协定接口、服务端终结点地址、绑定等音讯,它提议了顾客端应该到哪儿去索求服务以致怎么着调用服务的上上下下线索。但是服务端是何许公布其元数据的吧?
    答案是接纳WSDL文件,WSDL即Web Service Description
Language,Web服务描述语言,它是贰个XML文件,在此个文件中遵照一定的正统来对Web
瑟维斯实行描述,他是符合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

 

相关文章