ASP.NET Web服务与WCF服务的比较与应用

在现代软件开发中,Web服务扮演着至关重要的角色,它们允许不同应用程序通过网络进行通信和数据交换。ASP.NET Web服务和Windows Communication Foundation (WCF)服务是两种在.NET框架中实现Web服务的技术。本文将探讨这两种技术的特点、使用场景以及它们之间的差异。

ASP.NET Web服务是一种可以通过标准Web协议访问的可编程应用程序逻辑。其中一种Web协议是简单对象访问协议(SOAP)。SOAP使用基于标准的技术(XML用于数据描述,HTTP用于传输)来编码和传输应用程序数据。

使用ASP.NET Web服务的消费者不需要了解服务的实现平台、对象模型或编程语言;他们只需要知道如何发送和接收SOAP消息(HTTP和XML)。

WCF服务概述

Windows Communication Foundation(WCF)是一个用于构建面向服务应用程序的框架。使用WCF,可以将数据作为异步消息从一个服务端点发送到另一个服务端点。服务端点可以是IIS托管的持续可用服务的一部分,也可以是应用程序中托管的服务。端点可以是请求服务端点数据的服务的客户端。消息可以简单到作为XML发送的单个字符或单词,也可以复杂到作为二进制数据流发送。

WCF服务的使用场景

WCF服务适用于多种场景,包括但不限于:

  • 处理业务交易的安全服务。
  • 提供实时数据的服务,如交通报告或其他监控服务。
  • 允许两人实时通信或交换数据的聊天服务。
  • 轮询一个或多个服务以获取数据并以逻辑方式呈现的仪表板应用程序。
  • 将使用Windows Workflow Foundation实现的工作流作为WCF服务公开。
  • Silverlight应用程序轮询服务以获取最新的数据源。

WCF服务的特点

WCF服务具有以下特点:

  • 服务导向
  • 互操作性
  • 多种消息模式
  • 服务元数据
  • 数据契约
  • 安全性
  • 多种传输和编码
  • 可靠和排队的消息
  • 持久消息
  • 事务
  • AJAX和REST支持
  • 可扩展性

ASP.NETWeb服务与WCF服务的区别

WCF是微软早期Web服务技术的替代品,它提供了比传统Web服务更广泛的远程通信功能。WCF的设计从一开始就旨在总结微软提供的不同的分布式编程基础设施。WCF的端点可以通过SOAP/XML轻松通信,也可以通过TCP/二进制通信,且更改通信介质只需修改配置文件。理论上,这减少了在移植或更改业务需求、目标等时所需的新代码量。

ASMX比WCF更早,ASMX能做的WCF都能做(而且更多)。基本上,可以将WCF视为尝试在微软的世界中逻辑地组合所有不同的应用程序通信方式;ASMX只是这些众多方式中的一种,现在被归入WCF的能力伞下。

ASP.NETWeb服务只能通过HTTP访问,并且工作在无状态环境中,而WCF服务则更加灵活,因为它可以在不同类型的应用程序中托管。常见的WCF服务托管场景包括IIS、WAS、自托管、托管Windows服务。

XmlSerializer与DataContractSerializer

ASP.NET Web服务使用XmlSerializer将.NET类型序列化为XML。XmlSerializer有一些关键问题,例如只能序列化.NET类型的公共字段或属性,只能序列化实现IEnumerable接口的类,以及无法序列化实现IDictionary接口的类,如哈希表。

WCF使用DataContractSerializer,它在性能上优于XmlSerializer。DataContractSerializer的设计优势在于更好的性能,它明确显示了哪些字段或属性被序列化为XML,而XmlSerializer则没有明确指示。DataContractSerializer可以将哈希表转换为XML。

使用代码

ASP.NETWeb服务的开发依赖于定义数据,并依赖于XmlSerializer将数据转换为服务。

[WebService] public class Service : System.Web.Services.WebService { [WebMethod] public string Test(string strMsg) { return strMsg; } }

在WCF中,将编写以下代码:

[ServiceContract] public interface ITest { [OperationContract] string ShowMessage(string strMsg); } public class Service : ITest { public string ShowMessage(string strMsg) { return strMsg; } }

ServiceContractAttribute指定一个接口定义了WCF服务契约,OperationContract属性指示接口的方法定义了服务契约的操作。实现服务契约的类在WCF中被称为服务类型。

托管服务

ASP.NET Web服务被编译成类库程序集,服务文件具有.asmx扩展名,包含服务的代码。服务文件被复制到ASP.NET应用程序的根目录,程序集被复制到bin目录。应用程序可以通过服务文件的URL访问。

WCF服务可以在IIS或WindowsActivationService中托管。

将服务类型编译成类库,将具有.SVC扩展名的服务文件复制到虚拟目录,程序集复制到虚拟目录的bin子目录,将web.config文件复制到虚拟目录。

客户端开发

ASP.NET Web服务的客户端使用命令行工具WSDL.EXE生成。WCF使用ServiceMetadata工具(svcutil.exe)生成服务的客户端。

消息表示

ASP.NETWeb服务中SOAP消息的头部可以自定义。WCF提供了MessageContractAttribute、MessageHeaderAttribute和MessageBodyMemberAttribute属性来描述SOAP消息的结构。

服务描述

通过查询WSDL发出HTTP GET请求会导致ASP.NET生成描述服务的WSDL。它将WSDL作为请求的响应返回。生成的WSDL可以通过派生ServiceDescriptionFormatExtension类的类进行自定义。

对于.svc文件发出带有查询WSDL的请求会生成WSDL。WCF生成的WSDL可以通过使用ServiceMetadataBehavior类进行自定义。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485