初识WCF6

参考:

元数据调换

经过前两篇的求学,大家询问了WCF通讯的局地基本原理,大家领略,WCF服务端和客商端通过分享元数据(包罗劳动协定、服务器终结点消息)在七个终结点上创造通道进而进行通讯。大家透过手写代码(或布署)的办法为服务端编写了元数据新闻,未有依附元数据交流就完结了通讯。然则在骨子里运用中,元数据往往是数不完的,并且再也编写元数据的职业也是不值得的,因而一定会用到元数据调换的章程让客商端获取元数据,本篇我们就来更为询问一下元数据和元数据沟通。

1. 元数据是怎样提供的

初识WCF6。    我们精通,元数据富含了要和服务端举办通信的有所新闻,富含劳动协定接口、服务端终结点地址、绑定等新闻,它提出了客商端应该到哪个地区去寻找服务以至哪些调用服务的方方面面线索。不过服务端是何等宣布其元数据的吗?
    答案是行使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)来开展,我们先读书这一个工具。

初识WCF6。以此工具得以在Windows SDK中找到,具体地方为 C:Program Files初识WCF6。Microsoft SDKsWindowsv6.0Bin,假设你有VS2010,能够运转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

初识WCF6。观望系统提示的那行命令了么?系统在告诉我们怎么利用svcutil.exe来获取元数据。我们以往试一下,首先张开VS2009命令行:

始于-->全数程序-->Visual Studio 二〇〇九-->Visual Studio Tools-->Visual Studio命令行提醒

图片 2

 

 图片 3

初识WCF6。 

咱俩导航到叁个索引下计划获得元数据文件。

大家一时不依据浏览器提须求我们的措施做,因为依照那些方式做就把获得WSDL和翻译WSDL为客商端代码合在同步了,大家先猎取WSDL元数据文件,看看它是何等样子的。我们按如下的命令做:

svcutil.exe /t:metadata   

我们投入了一个参数/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 

这么它就不会生成WSDL而从来扭转客商端文件了。

只是根据那样的秘诀转换的文件可能不太切合大家的渴求,大家得以增多有的参数来钦命大家输出的文本名:

svctuil.exe /out:ClientProxy.cs /config:app.config  

那样输出的文本大家就能够一向包括在顾客端项目中采纳了。

  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>  

在这里种布局下,访谈元数据的方式是拜望下边包车型地铁地方:

 

其次种:通过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 GET,我们无法在浏览器中央机关单位接输入那一个地方来获得WSDL了(会唤起400不当),大家必得经过svcutil.exe或抬高服务援引的主意来拜谒。

使用svcutil.exe或劳务援用的时候能够不珍贵元数据领会方法是HTTP GET依旧Mex,他们会活动搜索到相符的法子,只供给把劳务的svc文件地方输入就足以了,不过大家相应明白,这两种元数据领会的主意是有分其余。

  1. 总结

透过几天前的学习,我们特别掌握了WCF元数据的和元数据沟通的原理。就算大家在实际上中国人民解放军海军事工业程高校业程中都会同一时候应该利用元数据交流工具来援助升高效用,但是那背后产生的装有环节也是大家应有了解的。

连锁财富

MSDN关于Svcutil.exe用法的文书档案

 

本文由41668金沙发布于金莎娱乐下载,转载请注明出处:初识WCF6

您可能还会对下面的文章感兴趣: