初识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文件(还应该有风度翩翩部分框架描述文件XSDState of Qatar,客商端得到文件后再使用自个儿的措施来解读WSDL,把她翻译成顾客端可用的源代码或布署文件,这个时候客商端就获取了劳动的编程模型,通过一些代理类,客户端照旧足以像调用本地对象同样采用WCF服务。

 

之所以整个进度是那般:客户端向服务端诉求元数据沟通–>服务端运维时将元数据编写成WSDL文件提供–>客商端获得文件–>顾客端翻译文件–>顾客端依照翻译结果生开销地类代码和配置–>顾客端获得劳动的地面编制程序模型。这正是元数据调换的经过。

  1. 获得WSDL

在微软平高雄,有三种艺术来张开元数据调换,第一是选用劳务援引,第二是使用元数据实用工具(svcutil.exe卡塔尔国来实行,大家先读书那一个工具。

其后生可畏工具得以在Windows
SDK中找到,具体地点为 C:\Program Files\Microsoft
SDKs\Windows\v6.0\Bin,假若您有VS2009,能够运营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来得到元数据。我们前不久试一下,首先张开VS2008命令行:

始于–>全数程序–>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

 

相关文章

admin

网站地图xml地图