初识WCF6

那正是在前文中我们来看的法子,大家可以动用HTTP
Get的办法来博取WSDL文件即在劳动地址.svc前面跟上?wsdl的点子直接呼吁到WSDL文件。我们得以一直在浏览器中输入服务端地址.svc?wsdl,浏览器就直接获取了WSDL文件并为大家体现出来了。

 

在WCF服务端的运营时,有一组类库随时待命把劳务的元数据输出为WSDL描述提须要请求者,只要有客户端依据服务端约定的措施来请求元数据,服务端即刻将服务运作时情形写成WSDL文件提供。客户端获得的实际上正是WSDL文件(还有一对框架描述文件XSD),客户端获得文件后再采纳自个儿的方法来解读WSDL,把她翻译成客户端可用的源代码或铺排文件,那时客户端就拿走了服务的编制程序模型,通过有个别代理类,客户端还是能像调用本地对象一样使用WCF服务。

顾名思义,正是基于当前目录下的有着的WSDL文件和XSD文件来生成客户端代码文件。进程会是如此

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

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

不过依据这样的章程生成的文书可能不太相符大家的供给,我们能够增加有的参数来钦点大家输出的公文名:

笔者们要铭记,WCF服务端公开元数据必须有所几个标准:

using System;  
using System.ServiceModel;  

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

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

第一种:通过HTTP GET方法。

这么它就不会生成WSDL而直白扭转客户端文件了。

 

大家先看2个例证,正是大家在前几篇中树立的IIS服务HelloWCFService,它被小编夜宿在IIS中。

图片 1

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

  1. 翻译WSDL文件

能够观望变化了一个文本,包涵多个架构文件和2个WSDL文件,那些便是劳务端元数据的描述了,全体的客户端请求到的实际上都以其一文件。WSDL的正儿八经比较多,关于它的始末,大家之后再开展来看,然则大致的开辟看一下就能收看有个别与服务协定、绑定、操作那些事物有关的地方。

事先我们理解了动用svcuitl.exe来博取WSDL并翻译成客户端代码的进度。实际上这两步能够合二为一。直接实施上边包车型客车下令能够一贯获得客户端文件:

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

(1) 为服务添加瑟维斯Metadata行为。

 

   
大家领悟,元数据包涵了要和服务端进行通讯的全体信息,包罗劳动协定接口、服务端终结点地址、绑定等音信,它提议了客户端应该到何处去探寻服务以及如何调用服务的全部线索。不过服务端是什么公布其元数据的吧?
    答案是使用WSDL文件,WSDL即Web Service Description
Language,Web服务描述语言,它是三个XML文件,在那么些文件中根据一定的行业内部来对Web
Service进行描述,他是切合W3C标准的,因为WCF是被规划为供不一致平台调用的劳务框架,所以客户端也许是非微软平台的,比如Java什么的。由此WCF必须使用WSDL那种国际标准的描述方法来描述服务才能被众多的阳台所走访。

 

  1. 使用服务引用

 

 图片 2

图片 3

源代码如下(HelloWCF.cs):

大家进入了3个参数/t:metadata
表示只输出元数据,不扭转代码。命令的施行进程如下:

  1. 更好地使用元数据交流工具

两边不可或缺。

 

 

 

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

 

假使想使用这种元数据理解办法,必须布置服务的瑟维斯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>  

在那种安插下,访问元数据的措施是访问上面包车型大巴地址:

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

 

图片 4

起来–>全体程序–>Visual Studio
二零一零–>Visual Studio Tools–>Visual Studio命令行提示

笔者们一时不依据浏览器提须要大家的方式做,因为根据那一个情势做就把获得WSDL和翻译WSDL为客户端代码合在协同了,咱们先获得WSDL元数据文件,看看它是哪些样子的。大家按如下的授命做:

 svcutil *.wsdl *.xsd

 

 图片 5

其实使用服务引用跟使用svcutil.exe生成的客户端模型是一致的,但是服务引用保留了WSDL文件(以及部分连锁的七七八八的文本),没有svcutil.exe来得那么舒心,不过它跟VS二〇〇八并入,使用起来相当的粗略,而且当服务爆发变化时,只须要右击服务引用接纳翻新服务就能够重复下载WSDL了

在微软平夏洛特,有三种格局来实行元数据沟通,第贰是使用服务引用,第3是应用元数据实用工具(svcutil.exe)来开始展览,大家先读书那个工具。

  1. 获得WSDL

 

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

那些工具得以在Windows
SDK中找到,具体地方为 C:\Program Files\Microsoft
SDKs\Windows\v6.0\Bin,借使您有VS贰零壹零,能够运行VS二零一零的命令行工具,那样就足以在其它目录下利用这一个顺序。

 

能够看看,生成了3个cs文件和三个铺排文件,这几个正是依据WSDL文件翻译成的客户端代码文件了。打开来看望,一定不生疏,便是应用ClientBase<>来生成1个客户端代理类并把终结点的音讯配置在了.config文件里。把那四个文本包罗在客户端的门类中并把output.config改成app.config就足以了。

图片 6

据此总体经过是那般:客户端向服务端请求元数据沟通–>服务端运维时将元数据编写成WSDL文件提供–>客户端获得文件–>客户端翻译文件–>客户端根据翻译结果生开支地类代码和配置–>客户端获得劳动的地面编程模型。那便是元数据调换的进度。

通过前两篇的求学,大家明白了WCF通讯的某个基本原理,大家明白,WCF服务端和客户端通过共享元数据(包涵劳动协定、服务器终结点音讯)在四个终结点上确立通道从而进行通讯。大家通过手写代码(或布署)的点子为服务端编写了元数据新闻,没有借助元数据沟通就贯彻了通信。可是在实际应用中,元数据往往是诸多的,而且再也编写元数据的行事也是不值得的,因而一定会用到元数据交流的措施让客户端获取元数据,本篇大家就来更为精通一下元数据和元数据调换。

  1. 展开一丢丢

(2) 打开元数据调换终结点。

图片 7

作为服务端,公开元数据是急需配备的,不一致的安顿会导致元数据驾驭的艺术各异。

1.
元数据是如何提供的

元数据交流

见到系统提醒的那行命令了么?系统在告知大家怎样行使svcutil.exe来赢得元数据。我们今天试一下,首先打开VS二零零六命令行:

 

大家导航到1个索引下准备获得元数据文件。

WSDL是一个XML文件,其实正是个公文文件,客户端必须将其根据自个儿的平台湾特务色把他翻译成本地代码文件来使用。svcutil当然会提供这一个功用。在wsdl文件所在目录下利用如下的指令就能够把WSDL文件翻译资金地代码文件:

WCF的公然元数据的一手首要有二种:

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

 

2.
元数据沟通的经过是怎么着的

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

如此输出的公文大家就足以平素包含在客户端项目中运用了。