初识WCF6

 

 

图片 1

svcutil.exe http://localhost/iisservice/hellowcfservice.svc?wsdl

后面大家询问了利用svcuitl.exe来赢得WSDL并翻译成客户端代码的经过。实际上这两步能够融为一体。直接实践上面包车型客车吩咐能够直接得到客商端文件:

 

2.
元数据交流的历程是怎样的

图片 2

小编们参加了二个参数/t:metadata
表示只输出元数据,不成形代码。命令的施行进度如下:

 

咱俩先看一个例证,正是大家在前几篇中国建工业总会公司立的IIS服务HelloWCFService,它被笔者夜宿在IIS中。

骨子里使用服务援引跟使用svcutil.exe生成的客户端模型是平等的,可是服务援引保留了WSDL文件(以及一些有关的七七八八的文书),未有svcutil.exe来得那么舒服,不过它跟VS二〇一〇合龙,使用起来极粗略,並且当服务发生变化时,只要求右击服务援用选择革新服务就足以重新下载WSDL了

 

(1) 为服务增加ServiceMetadata行为。

布局文件(web.config)如下:

元数据沟通

在浏览器中输入服务地点会如下图所示:

作为服务端,公开元数据是内需配置的,分裂的配置会导致元数据通晓的章程区别。

那正是在前文中大家看见的法子,大家能够利用HTTP
Get的办法来获取WSDL文件即在劳务地址.svc后边跟上?wsdl的点子直接呼吁到WSDL文件。我们得以一贯在浏览器中输入服务端地址.svc?wsdl,浏览器就平昔获取了WSDL文件并为大家呈现出来了。

始于–>全数程序–>Visual Studio
贰零零玖–>Visual Studio Tools–>Visual Studio命令行提醒

 图片 3

以此工具得以在Windows
SDK中找到,具体地方为 C:\Program Files\Microsoft
SDKs\Windows\v6.0\Bin,倘令你有VS二〇〇八,能够运维VS2008的命令行工具,那样就能够在任何目录下利用那些顺序。

WSDL是二个XML文件,其实正是个文本文件,顾客端必得将其依照自身的平台湾特务色把她翻译开支地代码文件来使用。svcutil当然会提供那一个职能。在wsdl文件所在目录下行使如下的通令就能够把WSDL文件翻译费用地代码文件:

 

 

以点带面,就是依附当前目录下的持有的WSDL文件和XSD文件来生成顾客端代码文件。过程会是这么

 

而是依照那样的章程调换的文书可能不太符合大家的渴求,咱们可以加多有的参数来钦命大家输出的公文名:

能够见到,生成了八个cs文件和四个配备文件,那么些正是基于WSDL文件翻译成的顾客端代码文件了。展开来拜谒,一定不面生,就是运用ClientBase<>来生成贰个客商端代理类并把终结点的消息配置在了.config文件里。把那多个文件包罗在客商端的类型中并把output.config改成app.config就可以了。

据此整个进程是如此:顾客端向服务端乞求元数据交换–>服务端运维时将元数据编写成WSDL文件提供–>客商端得到文件–>客商端翻译文件–>顾客端依据翻译结果生开销地类代码和配置–>客商端获得劳动的地面编制程序模型。那即是元数据调换的历程。

using System;  
using System.ServiceModel;  

namespace LearnWCF  
{  
    [ServiceContract]  
    public interface IHelloWCF  
    {  
        [OperationContract]  
        string HelloWCF();  
    }  

    public class HelloWCFService : IHelloWCF  
    {  
        public string HelloWCF()  
        {  
            return "Hello WCF!";  
        }  
    }  
} 

能够见见变化了3个文件,包蕴多少个架构文件和三个WSDL文件,那些正是服务端元数据的陈诉了,全部的顾客端供给到的实际都以那一个文件。WSDL的正式相当多,关于它的剧情,大家现在再开展来看,但是大致的张开看一下就会观看有个别与劳动协定、绑定、操作那一个东西有关的地方。

(2) 张开元数据沟通终结点。

 

在微软平高雄,有三种格局来举行元数据沟通,第一是应用服务援引,第二是利用元数据实用工具(svcutil.exe)来开展,我们先读书这几个工具。

大家要切记,WCF服务端公开元数据必得持有八个标准:

观察系统提示的那行命令了么?系统在报告大家如何利用svcutil.exe来收获元数据。大家明日试一下,首先展开VS二〇一〇命令行:

  1. 越来越好地利用元数据沟通工具

 svcutil *.wsdl *.xsd

要是想利用这种元数据掌握办法,必得配备服务的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

 

在WCF服务端的运作时,有一组类库随时待命把服务的元数据输出为WSDL描述提要求央浼者,只要有顾客端依照服务端约定的主意来诉求元数据,服务端立即将服务运维时景况写成WSDL文件提供。顾客端获得的莫过于正是WSDL文件(还也可以有一对框架描述文件XSD),客商端获得文件后再利用本身的艺术来解读WSDL,把她翻译成客商端可用的源代码或布署文件,那时顾客端就拿走了服务的编制程序模型,通过有个别代理类,顾客端照旧足以像调用本地对象同样选拔WCF服务。

  1. 应用劳务援用
  1. 扩充一小点

WCF的公然元数据的花招重要有二种:

svctuil.exe /out:ClientProxy.cs /config:app.config http://localhost/iisservice/hellowcfservice.svc?wsdl 

双方不可缺少。

第一种:通过HTTP GET方法。

 

svcutil.exe /t:metadata http://localhost/iisservice/hellowcfservice.svc?wsdl  

图片 4

    <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>  

透过前两篇的读书,我们领悟了WCF通讯的部分基本原理,大家知道,WCF服务端和顾客端通过共享元数据(富含服务协定、服务器终结点新闻)在多少个终结点上树立通道进而进行通讯。我们因而手写代码(或配备)的办法为服务端编写了元数据音讯,未有借助元数据沟通就兑现了通讯。不过在其实使用中,元数据往往是大多的,并且再也编写元数据的行事也是不值得的,因而一定会用到元数据交流的措施让顾客端获取元数据,本篇大家就来进一步询问一下元数据和元数据沟通。

 图片 5

图片 6

  1. 获得WSDL

大家权且不遵从浏览器提须要咱们的主意做,因为依据这一个格局做就把收获WSDL和翻译WSDL为顾客端代码合在一道了,我们先获得WSDL元数据文件,看看它是怎么着体统的。大家按如下的一声令下做:

这么输出的文书大家就足以平素包罗在顾客端项目中利用了。

1.
元数据是什么提供的

咱俩导航到八个索引下希图得到元数据文件。

源代码如下(HelloWCF.cs):

 

 

 

   
大家领略,元数据富含了要和服务端进行通讯的具备音讯,包涵劳动协定接口、服务端终结点地址、绑定等新闻,它提出了客商端应该到哪里去追寻服务以及如何调用服务的所有的事线索。不过服务端是怎么揭橥其元数据的吗?
    答案是采取WSDL文件,WSDL即Web Service Description
Language,Web服务描述语言,它是二个XML文件,在那一个文件中遵守一定的正规化来对Web
Service举办描述,他是顺应W3C标准的,因为WCF是被设计为供不一样平台调用的服务框架,所以客商端大概是非微软平台的,举例Java什么的。因此WCF必需选择WSDL这种国际规范的叙说方法来说述服务技能被众多的阳台所访问。

 

  1. 翻译WSDL文件

参考:http://blog.csdn.net/songyefei/article/details/7397296

还也可以有相应的框架描述文件(XSD)

如此那般它就不会生成WSDL而直接生成顾客端文件了。

图片 7