Welcome 微信登录

首页 / 网页编程 / ASP.NET / .NET Remoting与ASP.NET Web服务性能比较

.NET Remoting与ASP.NET Web服务性能比较2008-02-15摘要:本文对 Microsoft ASP.NET Web 服务与 Microsoft .NET Remoting 的相对性能进行比较。Microsoft ASP.NET Web 服务的互操作性最好,并完全支持 HTTP 上的 WSDL 和 SOAP;而 Microsoft .NET Remoting 可实现公共语言运行库类型系统的高保真,并支持其他数据格式和通信通道。

从 MSDN Code Center 下载 BDADotnet.msi 示例代码(英文)。

简介

ASP.NET Web 服务和 .NET Remoting 为分布式应用程序中的进程间通信提供了一整套设计选项。通常,ASP.NET Web 服务的互操作性最好,并完全支持 HTTP 上的 WSDL 和 SOAP;而 .NET Remoting 可实现公共语言运行库类型系统的高保真,并支持其他数据格式和通信通道。有关详细信息,请参阅 ASP.NET Web 服务还是 .NET Remoting:如何选择。

本文主要对这两项技术的相对性能进行比较。

ASP.NET Web 服务

ASP.NET 提供以 Microsoft® IIS 作为宿主的基础结构,支持 SOAP、XML 和 WSDL 等行业标准。尽管 .NET Remoting 也支持 IIS 宿主和 HTTP 上的 SOAP,但 ASP.NET 却可提供最高级别的 SOAP 互操作性,包括对 SOAP Section 5 和 Document/Literal 的支持。

ASP.NET 可以充分利用 IIS 具有的功能,如安全性和日志记录。IIS 宿主也很强大,因为它可以在 Aspnet_wp.exe 终止后重新生成它。此外,由于 ASP.NET Web 服务的服务器和客户端的配置都已简化,因此与使用 .NET Remoting 提供的服务相比,它的创建和使用更为容易。

.NET Remoting

.NET Remoting 更具通用性和扩展性,允许在使用不同传输协议和序列化格式的对象间进行通信。它支持二进制、SOAP、自定义格式以及 TCP、HTTP 和自定义协议。支持多对象创建和生存期模式,包括 Singleton、SingleCall 和 Client-Activated。Remoting 需要一个主机进程,可以是 IIS、Microsoft® Windows 服务或用 .NET 编写的可执行文件。

在具有 ASP.NET 的 IIS 中宿主使用 SOAP 格式化程序的 .NET Remoting 对象时,该对象可以公开为 XML Web 服务。由于有效负载以 HTTP 上的 SOAP 进行编码,因此任何支持 SOAP 编码格式的客户端均可通过 Internet 访问该对象。使用 HTTP 协议的另一个优点是它通常可以畅通无阻地通过大多数防火墙。TCP 通道和二进制格式化程序可以部署在服务器和客户端均运行 .NET Framework 的 Intranet 环境中。此方法的性能最佳,因为在使用原始套接字通过网络传输数据时使用了效率高于 HTTP 的自定义协议。尽管此方法在封闭环境中可以提供出众的性能,但它不能部署于客户端未运行 .NET Framework 的跨平台方案。

IIS 主机使用安全套接字层 (SSL) 为网络级保护提供安全通信,您也可以利用 IIS 和 ASP.NET 身份验证和授权。TCP 通道以及不通过 IIS 宿主的 HTTP 通道不支持安全套接字传输,因此其数据以明文形式传输。如果使用的是 TCP 通道或由非 IIS 进程宿主的 HTTP 通道,则您需要负责实现其安全性。

测试方案

分布式应用程序中进程间通信的性能取决于以下因素:

用于跨远程边界的应用程序间传输信息的通道(包括 TCP 和 HTTP)占用的系统开销量。TCP 套接字比 HTTP 更为有效。

另一个因素是序列化。序列化流可以通过 XML、SOAP 或压缩二进制表示法进行编码。ASP.NET Web 服务使用 XMLSerializer 类将对象序列化为 XML 流,XML 流的速度非常快,但由于存在 XML 分析,因而需要一定的系统开销。Remoting 分别使用 BinaryFormatter 和 SOAPFormatter 将对象序列化为二进制格式和 SOAP 格式。由于这些格式化程序使用反射,因而对于引用对象很快,但对于必须经过装箱或取消装箱来通过反射 API 传递的值类型则较慢。此外,SOAPFormatter 还需要额外的系统开销以生成编码的 SOAP 消息。