初识WCF6

2019-10-11 19:58栏目:澳门平台
TAG:

参考:

元数据交流

因以前两篇的求学,大家询问了WCF通讯的片段基本原理,大家精通,WCF服务端和客商端通过分享元数据(满含劳动协定、服务器终结点消息)在五个终结点上确立通道进而进行通信。我们因而手写代码(或配备)的主意为服务端编写了元数据新闻,没有依赖元数据调换就兑现了通信。可是在其实使用中,元数据往往是好些个的,何况再也编写元数据的做事也是不值得的,因而一定会用到元数据调换的不二诀窍让顾客端获取元数据,本篇大家就来更为询问一下元数据和元数据交换。

1. 元数据是怎么样提供的

    大家领会,元数据满含了要和服务端进行通讯的装有音信,富含劳动协定接口、服务端终结点地址、绑定等信息,它建议了顾客端应该到何地去追寻服务以致怎么样调用服务的整整线索。不过服务端是哪些发布其元数据的吧?
    答案是使用WSDL文件,WSDL即Web Service Description Language,Web服务描述语言,它是二个XML文件,在这里个文件中服从一定的正经来对Web 瑟维斯进行描述,他是相符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二零零六,能够运行VS2008的命令行工具,那样就足以在其他目录下行使这么些程序。

作者们先看一个事例,就是我们在前几篇中确立的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

一经想行使这种元数据领会方法,必需布置服务的瑟维斯Metadata行为,并点名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