共用方式為


HOW TO:建置裝載應用程式

本主題專門說明一項為了在現有應用程式中提供回溯相容性而保留的舊有技術,不建議用於新的開發工作。分散式應用程式應使用  Windows Communication Foundation (WCF) 進行開發。

HOW TO:建置可遠端處理的型別主題中定義的 RemotableType 類別本身並不特殊。若要在其他應用程式定義域中啟用物件以遠端建立此物件的執行個體,您必須建置主機或接聽應用程式來執行下列工作:

  • 選擇並註冊通道,此通道是一個可代替您處理網路通訊協定與序列化格式的物件。

  • 在 .NET 遠端系統中註冊您的型別,以便此系統使用您的通道來接聽您的型別的要求。

.NET Framework 包含三個預設的通道:HttpChannel (預設會使用 SOAP 格式)、TcpChannel (預設會使用二進位格式),以及 IpcChannel (預設會使用二進位格式)。您不用開啟連接埠即可透過防火牆使用 HttpChannel,且它支援標準安全性與驗證通訊協定。如需選擇適合您情況的通道之詳細資訊,請參閱通道

您可以使用任何型別的應用程式定義域來建置接聽應用程式,包括 Windows Forms 應用程式、ASP.NET Web 應用程式、主控台應用程式、Windows 服務 (亦稱為 Windows NT 服務),或是其他任何 Managed 應用程式定義域。由於遠端組態需針對每個應用程式定義域個別完成,應用程式定義域必須執行才能接聽要求。

ecc85927.note(zh-tw,VS.100).gif注意:
與 COM 不同的是,遠端處理不會為您啟動主機或伺服器應用程式。這是 .NET 遠端處理與 COM 遠端啟動過程的重要差異。

若要完成組態,您可以利用程式設計的方式,或使用應用程式或電腦組態檔。

遠端系統使用此檔案中的資訊來接聽並將遠端要求路由至可遠端處理型別的執行個體上。此檔案會代替要接聽的物件指定伺服器啟動模式、型別名稱與型別組件,並指定物件的統一資源識別元 (URI) 或是物件的外部名稱(如需物件 URI 與遠端處理的詳細資訊,請參閱啟動過程 URL)。

ecc85927.note(zh-tw,VS.100).gif注意:
儘管先前的組態檔中只有幾項設定,使用 .NET 遠端處理所發生的問題,大部分是因為這些設定當中有些設定不正確,或是不符合用戶端應用程式的組態設定。您很容易就會輸入錯誤名稱、忘記連接埠,或是忽略某個屬性。如果您的遠端處理應用程式有任何問題,請先檢查您的組態設定。

使用組態檔可讓您直接變更遠端組態,而不用特別重新編譯可執行檔。如需 .NET 遠端基礎結構的組態詳細資訊,請參閱遠端設定結構描述

ecc85927.note(zh-tw,VS.100).gif注意:
如需如何建置並執行這個範例的完整指示,請參閱 HOW TO:編譯並執行基本遠端應用程式

若要實作使用組態檔的簡單主機應用程式定義域

  1. 延續 HOW TO:建置可遠端處理的型別一文所示作法,在 remoting 底下建立另一個目錄,並將其稱為 host。建立遠端類別的組態檔。主機應用程式必須能夠載入遠端類別組態,因此,組態檔必須與主機應用程式的組件儲存在同一個目錄中,否則將找不到組態檔而擲回例外狀況。下列程式碼說明了指定遠端物件的組態檔為 Singleton,其實作則是稱為 RemotableType 的類別 (位於稱為 RemotableType 組件中)。接下來,會將 HttpChannel 註冊為接聽連接埠 8989。將此檔案儲存在 remoting\listener 目錄中。檔名應該遵循 app-name.exe.config 的格式。在此種情況下,稱為 listener.exe.config

    <configuration>
       <system.runtime.remoting>
          <application>
             <service>
                <wellknown 
                   mode="Singleton" 
                   type="RemotableType, RemotableType" 
                   objectUri="RemotableType.rem"
                />
             </service>
             <channels>
                <channel ref="http" port="8989"/>
             </channels>
          </application>
       </system.runtime.remoting>
    </configuration>
    
  2. 使用您選擇的語言來建立新的來源檔。在來源檔案的頂端匯入 System.Runtime.Remoting 命名空間:

    Imports System
    Imports System.Runtime.Remoting
    
    using System;
    using System.Runtime.Remoting;
    
  3. 在 Main 方法中,載入可設定遠端類別的組態檔,顯示訊息以讓使用者知道主機正在執行,然後等候按鍵動作。將此檔案儲存在 remoting\listener 目錄中。

    Public Class Listener
        Public Shared Sub Main()
            RemotingConfiguration.Configure("Listener.exe.config", False)
            Console.WriteLine("Listening for requests. Press enter to exit...")
            Console.ReadLine()
        End Sub
    End Class
    
    public class Listener
    {
        public static void Main()
        {
            RemotingConfiguration.Configure("Listener.exe.config", false);
            Console.WriteLine("Listening for requests. Press enter to exit...");
            Console.ReadLine();
        }
    
    }
    
  4. HOW TO:建置可遠端處理的型別一文中產生的 RemotableType.dll 複製到 remoting\listener 目錄中。主機應用程式必須參考此組件。輸入下列命令,將此類別編譯為可執行檔:

    vbc /r:RemotableType.dll Listener.vb
    
    csc /noconfig /r:RemotableType.dll Listener.cs
    
  5. 您現在擁有一個稱為 Listener.exe 的組件。現在就嘗試執行它,檢查是否已設定成功。如果防火牆目前已封鎖編號 8989 的連接埠,可能會出現安全性對話方塊。如果是這樣,請按一下 [解除封鎖] 按鈕,暫時開啟防火牆。

  6. 如需如何使用可遠端處理型別的詳細資訊,請參閱 HOW TO:建置用戶端應用程式

範例

' Listener.vb
Public Class Listener
    Public Shared Sub Main()
        RemotingConfiguration.Configure("Listener.exe.config", False)
        Console.WriteLine("Listening for requests. Press enter to exit...")
        Console.ReadLine()
    End Sub
End Class
// Listener.cs
using System;
using System.Runtime.Remoting;

public class Listener
{
    public static void Main(string[] args)
    {
        RemotingConfiguration.Configure("Listener.exe.config", false);
        Console.WriteLine("Listening for requests. Press enter to exit...");
        Console.ReadLine();
    }
}

另請參閱

工作

HOW TO:建置裝載應用程式

參考

遠端設定結構描述

概念

遠端應用程式的組態
伺服器啟動過程

其他資源

建置基本 .NET Framework 遠端處理應用程式

建置日期:2010-02-13