在这些文件中遵照一定的规范来对Web

参考: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,能够运营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

 

相关文章