WCF:微软最新的服务方法

日期: 2008-03-13 作者:Daniel Rubio 来源:TechTarget中国 英文

使用Web服务的每一种主要语言或平台都把与自身相关的特性集合在一个名字下,Java开源开发人员使用Axis,PHP阵营则使用PEAR,而基于微软工具的开发则使用WCF (Windows Communication Foundation).   WCF曾被称为Indigo,实际上不只是一个Web服务项目,它的目的是要微所有的分布式系统技术提供一种保护伞,其核心是一套面向服务的API。   现在,.NET框架是利用微软工具开发应用程序的最先进的方法。它已经为解决一系列C/S交互场景提供了办法。   比如,ASP.NET Web Services(ASMX)提供了通过Web服务开发应用程序接口的最简……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

使用Web服务的每一种主要语言或平台都把与自身相关的特性集合在一个名字下,Java开源开发人员使用Axis,PHP阵营则使用PEAR,而基于微软工具的开发则使用WCF (Windows Communication Foundation).

  WCF曾被称为Indigo,实际上不只是一个Web服务项目,它的目的是要微所有的分布式系统技术提供一种保护伞,其核心是一套面向服务的API。

  现在,.NET框架是利用微软工具开发应用程序的最先进的方法。它已经为解决一系列C/S交互场景提供了办法。

  比如,ASP.NET Web Services(ASMX)提供了通过Web服务开发应用程序接口的最简单的形式,而.NET Remoting则是使.NET和.NET应用程序交互的核心。

  但在另一方面,很多系统不是构建得超出了.NET框架上下文的范围,就是得通过其它办法来进行特殊处理。

  对于需要Web服务标准支持(WS-*说明书)的那些应用程序,微软则使用了Web Services Enhancements (WSE)。而对于那些遗留系统,经常用到的分布式交互技术则是用于异步通讯的Microsoft Messaging、COM+以及Microsoft's Host Integration Server。

  你应该注意到所有这些场景都有一个相同的主题:分布式应用的通信。但是,很显然,每一种技术都用到不同的方法或技术来解决这个问题。而WCF背后的初衷就是针对应用程序中用到的所有通信接口为开发人员提供一步到位的方法。

  WCF是对.NET技术的一个补充,而非现在.NET框架的替代品。但当你仔细思考把微软的分布式技术都统一到同一个屋檐下会达到怎样的效果后,你就会领悟到为什么说WCF/Indigo是简化创建面向服务设计的重要组成部分,以及它为什么是未来微软的操作系统Vista的一个基础。

  在使用WCF时,你不仅只需要懂得一种方法就足以把很多应用作为服务暴露出来,而且你还可以用同样的方法来对付当前技术本身的底层细节。

  用WCF服务使能化应用程序的真正概念并非与那些用来运行Web服务的概念不同,真正的不同之处我们在下文中会体现出来。

  假设你已经有一个提供天气预报的应用程序。不管使用的什么接口,浏览器HTML、无线WML还是Web服务SOAP/WSDL,在结构内部都会有一个Interface和Class来为获得天气预报提供必要的钩子程序。下面的示例显示了WCF中这个Interface和Class:

  Listing 1.1 WCF Interface

  // Interface using WCF
  using System.ServiceModel;

  [ServiceContract]
  interface IWeather
  {
   [OperationContract]
   double Celsius(String city, int time);

   [OperationContract]
   double Farenheit(String city, int time);
  }

  第一个声明表明了WCF的命名空间——using System.ServiceModel——而接口和方法声明则描述了应用的行为。这是直接的.NET语法,毋庸多言。而另一方面,带括号的声明是我们在.NET中熟知的属性,它是WCF的核心。

  [ServiceContract]表明该接口会形成WCF的可服务应用的基础,而在每一个方法前面的[OperationContract]则说明该方法会暴露成一个服务。

  以服务的观点,[OperationContract]被用来标明哪一个方法会最终成为WSDL描述的操作。这些WCF属性是最基础的,但是你可以指定一个完整的与服务相关的行为,并在最后使它们成为一种服务合约。例如,对于传统支持,一个[OperationBehavior(RequireTransaction=true, AutoCompleteTransaction=true)]的属性依然可以使用。

  下面,我们可以使用这个接口,只要设计一个下面这样的实现类即可。

  Listing 1.2 Class using WCF Interface

  // Implementation class
  class Weather : IWeather
  {
   public double Celsius(String city, int time)
   {                           
     // Perform logic, return temperature for specific city and time
   }
     
   public double Farenheit(String city, int time)
   {
   // Perform logic, return temperature for specific city and time
   }

   // Private method
   private double FarenheitToCelsius(double degrees)
   {
   // Perform logic, return temperature in Celsius
   } 

   // Private method
   private double CelsiusTpFarenheit(double degrees)
   {
   // Perform logic, return temperature in Farenheit
   } 

  }

  在深入了解实现类使用WCF接口的细节之前,你应该意识到使用该Interface/Class的组合设计是很简单使用的OO实践。使用WCF和它的属性能尽可能简单的与真实的类直接合成。

  回到实现类,代码与典型的.NET类差别不大,但该类是继承了WCF接口,WCF属性对每个实现方法都会产生影响。

  现在,再转到实际部署这些代码的地方。WCF可以用两种方法部署,或者通过Windows Activation Service (WAS),它与在IIS中部署ASP.NET Web Services (ASMX) I非常类似,而另一种方法则是直接在需要使用服务的任何内部应用类中部署。

  为了简单,我们采用与ASP.NET类似的方法。在这种方法中,一个WCF服务可以被整个替换为.svc文件与ASP.NET Web services .asmx文件一起部署,或者WCF类为DLL程序集使用代码后类型声明,例如

  最后,WCF服务需要被绑定到一个特定的地址,这是需要在ASP.NET应用程序的web.config文件中指定的。Listing 1.3显示了该文件:

  Listing 1.3 web.config for WCF Service

  <?xml version="1.0" encoding="utf-8" ?>
  <configuration   http://schemas.microsoft.com/.NetConfiguration/v2.0">http://schemas.microsoft.com/.NetConfiguration/v2.0">
   <system.serviceModel>
      <services>
         <service serviceType="SelfHostedService.Weather">
            <endpoint address="http://localhost:8080/weather"
                     bindingSectionName="basicProfileBinding"
                     contractType="SelfHostedService.IWeather"/>
         </service>
      </services>
   </system.serviceModel>
  </configuration>

  通过访问在web.config文件中指定的最终地址,你可以获得由WCF服务提供的天气数据。

  用类似的办法,对于客户端,WCF也可以让我们从服务合约生成必要的.NET骨架来创建一个消费者应用程序,不过我们把具体细节留在另外的文章中讲解。

  至此,我们来总结一下对Windows Communication Framework的看法,即未来几年在用微软技术构建面向服务的应用程序时,它一定会成为主流的解决方案。

相关推荐

  • SAP收购CallidusCloud 与Salesforce竞争

    一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]

  • 数字化转型:如何更好地利用API和微服务

    API,即应用程序编程接口,它提供给应用程序、开发人员访问其它应用的能力,而又无需访问源码,无需理解内部工作机制细节;简单地说,API就是实现应用与应用连接的一种隐形的桥梁。

  • 金融行业数字转型:利用API构建新IT基础

    从制造业、物流业,银行业到零售业,各行各业的根基都因应用经济的兴起发生着深刻的变革。在互联网和智能手机普及化的推动下,这种现象变得司空见惯。到2021年 ,蓬勃发展的全球应用经济的预估总值将达到6.3万亿美元,相比2016年的1.3万亿美元,增长近5倍。

  • 如何使用Azure API管理服务?

    在云和微服务架构时代,API是数字化业务的通用语言。根据分析公司Forrester Research预测,仅在美国,API管理工具的支出将在未来5年内达到近30亿美元。