初识WCF6

2019-12-05 13:39 来源:未知

参考:

元数据交流

由早先两篇的学习,大家询问了WCF通讯的片段基本原理,大家知道,WCF服务端和顾客端通过分享元数据(满含劳动协定、服务器终结点消息卡塔尔(قطر‎在五个终结点上确立通道进而实行通讯。我们通过手写代码(或配备卡塔尔(قطر‎的点子为服务端编写了元数据新闻,未有依附元数据调换就贯彻了通讯。然则在实质上接纳中,元数据往往是累累的,并且再也编写元数据的干活也是不值得的,由此一定会用到元数据调换的艺术让顾客端获取元数据,本篇我们就来进一层领悟一下元数据和元数据沟通。

1. 元数据是怎么提供的

    大家领略,元数据包含了要和服务端进行通讯的具有新闻,富含服务协定接口、服务端终结点地址、绑定等音信,它提出了客商端应该到什么地方去寻觅服务以致怎么着调用服务的一切线索。可是服务端是如何发表其元数据的啊?
    答案是利用WSDL文件,WSDL即Web Service Description Language,Web服务描述语言,它是贰个XML文件,在此个文件中根据一定的正式来对Web Service举行描述,他是切合W3C标准的,因为WCF是被规划为供不相同平台调用的劳务框架,所以客商端也许是非微软平台的,例如Java什么的。因而WCF必需采纳WSDL这种国际标准的汇报方法来描述服务才干被非常多的平台所拜访。

 

2. 元数据调换的历程是什么的

在WCF服务端的运作时,有风流洒脱组类库随即待命把劳动的元数据输出为WSDL描述提要求供给者,只要有顾客端遵照服务端约定的方法来须求元数据,服务端顿时将服务运行时意况写成WSDL文件提供。客商端得到的实在便是WSDL文件(还应该有局地框架描述文件XSD卡塔尔(英语:State of Qatar),顾客端获得文件后再使用本身的秘籍来解读WSDL,把她翻译成顾客端可用的源代码或布署文件,那时候客商端就获取了劳动的编制程序模型,通过一些代理类,客商端还可以像调用本地对象相像选用WCF服务。

 

进而全体进程是如此:客商端向服务端央求元数据沟通-->服务端运转时将元数据编写成WSDL文件提供-->顾客端拿到文件-->顾客端翻译文件-->客户端根据翻译结果生花销地类代码和布署-->客户端得到劳动的地点编制程序模型。那正是元数据沟通的进度。

  1. 获得WSDL

在微软平台南,有两种办法来开展元数据交流,第一是行使服务引用,第二是选用元数据实用工具(svcutil.exe卡塔尔来扩充,咱们先读书这一个工具。

本条工具得以在Windows SDK中找到,具体地方为 C:Program FilesMicrosoft SDKsWindowsv6.0Bin,假若您有VS2008,能够运营VS2009的命令行工具,这样就足以在其它目录下利用这些程序。

我们先看一个例证,便是大家在前几篇中树立的IIS服务HelloWCF瑟维斯,它被笔者夜宿在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来得到元数据。大家明日试一下,首先展开VS2009命令行:

开班-->全数程序-->Visual Studio 二零零六-->Visual Studio Tools-->Visual Studio命令行提示

手机客户端 2

 

 手机客户端 3

 

我们导航到八个目录下策画获得元数据文件。

作者们一时不遵照浏览器提供给大家的艺术做,因为依照这么些方式做就把得到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卡塔尔(英语:State of Qatar) 为服务增加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用法的文档

 

TAG标签:
版权声明:本文由银河国际点击登录发布于手机客户端,转载请注明出处:初识WCF6