共用方式為


選擇 .NET 中的通訊選項

.NET Framework 提供若干種方法來與不同應用程式定義域中的物件通訊,每一種在設計時都顧及到特定層級的專業技術和彈性。例如,網際網路的成長讓 XML Web Service 成為一種吸引人的通訊方法,因為 XML Web Service 是建置在 HTTP 通訊協定和 SOAP 格式的共通基礎架構之上,而這種架構使用 XML。這些都是公開標準,並可立即用於目前的 Web 基礎架構,而不需要擔心其他的 Proxy 或防火牆 (Firewall) 問題。

但是,如果只是因為在 HTTP 連接上使用 SOAP 序列化有關的效能問題時,就不是所有的應用程式都應該使用某種形式的 XML Web Service 建置。這個章節可以協助您決定您希望應用程式所採用的物件間通訊形式。

ASP.NET 或遠端處理?

ASP.NET 和 .NET 遠端處理都是處理序間的通訊實作 (Implementation)。ASP.NET 提供一種由 Internet Information Services (IIS) 裝載的基礎結構,這種結構可妥善地處理基本型別,並且 Web 應用程式的開發人員也相當熟悉這種結構。.NET 遠端處理是泛用且可擴充的處理序間通訊系統,可用來建立裝載於 IIS 中的 XML Web Service (並擁有 ASP.NET 和 IIS 的所有安全性、延展性以及工作階段和應用程式狀態) 或使用任何其他類型通訊協定或序列化格式的應用程式。

您需要的通訊類型和您熟悉的程式撰寫模型 (Programming Model),是您選用這兩種程式撰寫模型其中之一的兩個主要準則。您必須選擇處理序間通訊類型,以及能夠讓您以最容易的方式實作決策的程式撰寫模型。這裡列出一些選擇所需處理序間通訊類型時的準則 (按優先權的順序),以及利用 ASP.NET 所建置的 XML Web Service 與利用 .NET 遠端處理所建置的 XML Web Service 的比較:

  1. 安全性需求。

    如果您需要加密您的呼叫或驗證您的用戶端,您必須使用裝載於 IIS 中的 HTTP 應用程式,不論它是 ASP.NET 應用程式或是遠端處理應用程式。這是因為 ASP.NET 和 .NET 遠端處理使用由 IIS 提供的安全性服務。當 .NET 遠端處理裝載於 IIS 之外 (例如,在 Windows 服務中) 時,.NET 遠端處理不提供任何安全性服務 。雖然您可以使用任何應用程式定義域中的 .NET 遠端處理 (與以 ASP.NET 建置的 XML Web Service 不同,後者必須裝置於 IIS 之內),但是當您在 IIS 之外使用 .NET 遠端處理時,您必須自行提供所需的安全性功能。使用 HTTP 連接時,您不需要使用 SOAP 編碼方式格式;您可以使用二進位編碼方式來增加速度。

  2. 速度。

    .NET 遠端處理潛在的效能優點超過以 ASP.NET 建置的 XML Web Service,因為它提供您使用二進位編碼方式和預設 TcpChannel 的選項,可提供最佳的處理序間通訊效能。即使您不使用預設 TcpChannel,您仍可以使用二進位格式子 (Formatter) 和 HttpChannel 類別,以利用 IIS (或任何遠端處理的 HttpChannel 接聽應用程式) 來使用 POST 通訊。即使您是使用 HttpChannel,僅使用二進位格式也將大幅增加遠端處理的呼叫效能。如果您沒有任何安全性方面的問題 (例如,如果您所建置的是完全在防火牆內執行的小型應用程式),則預設的 TcpChannel 加上二進位格式就會達到最佳效能。以 ASP.NET 建置的 XML Web Service 永遠使用 SOAP 編碼方式,通常這種方式的效能較二進位編碼方式差。但是,在不需要 .NET 遠端處理功能但需要具有 SOAP 訊息的 HTTP 通訊協定的情況下,以 ASP.NET 建置的 XML Web Service 能夠提供較佳的效能。

  3. 交互操作。

    如果您需要在不同的作業系統之間交互操作,您通常會使用 SOAP 格式通訊協定;不論您是使用以 ASP.NET 建置的 .NET 遠端處理或 ASP.NET. XML Web Service,都能讓您在定義 SOAP 通訊的形狀和樣式時,比 .NET 遠端處理具有更大的彈性。這可以使得與不同平台和用戶端之間的交互操作比較容易。雖然您可以使用遠端處理應用程式在不同的作業系統之間交互操作,但是 .NET 遠端處理是與 .NET 用戶端通訊的最佳化方式。

  4. 延展性 (Scalability)。

    將您的應用程式裝載在 IIS 之內,不論您是使用 .NET 遠端處理或 ASP.NET,都可提供您所需要的延展性。

  5. Common Language Runtime 功能的使用。

    由於 .NET 遠端處理更能充分運用 .NET 用戶端,所以您可以在遠端處理應用程式中使用一些 ASP.NET 建置的 XML Web Service 所無法提供的 .NET 功能,包括:

    • 介面。
    • CallContext
    • 屬性。
    • 索引子 (Indexer)。
    • Managed Extensions for C++。
    • 用戶端和伺服器應用程式之間的型別精確度。
    • 委派 (Delegate)。
  6. 物件導向應用程式設計。

    以 ASP.NET 建置的 XML Web Service 不代表物件導向的設計範例。雖然 IIS 和 ASP.NET 基礎結構提供一些狀態服務,但是本質上他們是沒有狀態 (Stateless) 的 Web 資源,極類似 Web 網頁。.NET 遠端處理物件是物件,並且可當作物件來處理。因此,您可以使用下列 ASP.NET 所沒有的物件導向 .NET 功能:

    • 對遠端物件的物件參考。
    • 一些物件啟動過程 (Activation) 選項。
    • 物件導向狀態管理。
    • 分散式物件存留期 (Lifetime) 管理。

以下簡單摘要使用 ASP.NET、System.Net 命名空間 (Namespace) 和 .NET 遠端處理來建置的 XML Web Service 之間的一些差異。

XML Web Service

如果您要使用 Web 應用程式模型建置 ASP 應用程式,並且具有 ASP.NET HTTP Runtime 的強大功能 (包括 Microsoft Visual Studio .NET 中的強大支援),則以 ASP.NET 所建置的 XML Web Service 將會是您的選擇。藉由 XML Web Service 基礎結構,您可以利用最適用於 Web 架構應用程式的通訊協定、格式和資料型別,輕鬆地建立元件供其他應用程式使用,或使用其他應用程式所建立的元件。但該結構並不支援電腦間完全一致的型別精確度,且只能傳遞某些型別的引數。如需詳細資訊,請參閱使用 ASP.NET 和 XML Web Service 用戶端建立的 XML Web Service

System.Net 命名空間

您可以使用 System.Net 命名空間中的類別,從頭開頭建置整個通訊結構。您也可以使用 System.Net 類別實作通訊協定和可插入遠端處理架構中的序列化格式。如需詳細資訊,請參閱存取網際網路

.NET 遠端處理

.NET 遠端處理所提供的工具,可用於任意數量的多樣化通訊案例,其中包括、但不限於 XML Web Service。使用 .NET 遠端處理,您可以:

  • 發行或使用任何類型應用程式定義域中的服務,不論定義域是主控台應用程式、Windows Form、Internet Information Services (IIS)、XML Web Service 或 Windows 服務。

  • 保留二進位格式通訊中完整的 Managed 程式碼型別系統精確度。

    **注意   **XML Web Service 使用 SOAP 格式,這個格式未保留所有型別的詳細資訊。

  • 以傳址方式 (By Reference) 傳遞物件,並傳回特定應用程式定義域中的特定物件。

  • 直接控制啟動過程特性和物件存留期。

  • 實作並使用協力廠商通道或通訊協定,以擴充通訊符合您的特定需求。

  • 直接參與通訊處理,以建立您所需的功能。

請參閱

使用 .NET 遠端處理存取其他應用程式定義域中的物件 | .NET 遠端處理概觀 | 遠端處理範例 | 進階遠端處理