初识WCF6最大平台

2019-09-10 15:58栏目:最大平台
TAG:

参考:

元数据调换

经过前两篇的就学,大家询问了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 FilesMicrosoft SDKsWindowsv6.0Bin,倘令你有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   

笔者们参与了叁个参数/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用法的文书档案

 

版权声明:本文由澳门萄京官网最大平台发布于最大平台,转载请注明出处:初识WCF6最大平台