摘要:本文對 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 消息。