共用方式為


使用 Visual C# 建立遠端伺服器

本文可協助您建立遠端伺服器,讓另一個應用程式可以使用 Visual C# 進行存取。

原始產品版本: Visual C#
原始 KB 編號: 307445

摘要

本文說明如何建立另一個應用程式可以存取的遠端伺服器。 存取此伺服器的應用程式可以位於同一部計算機、不同計算機上,或位於不同的網路上。 遠端伺服器分成兩個部分:伺服器對象和伺服器應用程式。 伺服器物件是用戶端與其通訊的物件,而伺服器應用程式會用來向 .NET 遠端運行時間架構註冊伺服器物件。

本文參考下列Microsoft .NET Framework 類別庫命名空間:

  • System.Runtime.Remoting
  • System.Runtime.Remoting.Channels
  • System.Runtime.Remoting.Channels.Tcp

需求

本文假設您已熟悉下列主題:

  • Visual Studio .NET 或 Visual Studio
  • Visual C# .NET 或 Visual C#
  • 網路

建立遠端伺服器物件

建立伺服器應用程式的第一個步驟是建立伺服器物件。 伺服器物件是用戶端應用程式在伺服器電腦上具現化和通訊的內容。 用戶端應用程式會透過在用戶端上建立的 Proxy 對象來執行此動作。 在此範例中,伺服器對象位於類別庫 (DLL) 中,稱為 myRemoteClass

  1. 在 Visual C# .NET 中建立新的類別庫應用程式。 將專案 命名為 ServerClass。 Class1 預設會建立。

  2. 在 方案總管 中,將Class1.cs程式代碼檔案重新命名為 ServerClass.cs

  3. 開啟 ServerClass.cs,並將 Class1 重新命名myRemoteClass。 您也需要將 類別的預設建構函式重新命名為 ,使其符合類別名稱。 myRemoteClass 應該繼承自 MarshalByRefObject 類別。 您的類別現在應該會顯示如下:

    public class myRemoteClass: MarshalByRefObject
    {
        public myRemoteClass()
        {
          // TO DO: Add constructor logic here.
        }
    }
    
  4. 將公用方法新增至 myRemoteClass 以接受字串、向控制台顯示具有字串值的訊息,如果字串不是空的,則會傳 回 True

    public bool SetString(String sTemp)
    {
         try
         {
             Console.WriteLine("This string '{0}' has a length of {1}", sTemp, sTemp.Length);
             return sTemp != "";
         }
         catch
         {
             return false;
         }
    }
    
  5. 建置專案以建立 ServerClass.dll 元件。

  6. 儲存並關閉專案。

建立遠端伺服器應用程式

建立用戶端將與其通訊的伺服器對象之後,您必須向遠端架構註冊此物件。 註冊物件時,您也必須啟動伺服器,並讓伺服器接聽埠,用戶端才能連線到該埠。 若要這樣做,您需要輸出可執行文件的項目類型。

將伺服器物件包含在個別專案中的原因是讓您可以輕鬆地從客戶端項目中參考伺服器物件。 如果您在此專案中包含它,則無法參考它,因為參考只能設定為 DLL 檔案。

  1. 在 Visual C# .NET 中建立新的控制台應用程式,以啟動遠端伺服器。 Class1 預設會建立。

  2. 在 方案總管 中,將Class1.cs檔案重新命名為 RemoteServer.cs

  3. 新增命名空間的 System.Runtime.Remoting 參考。

  4. 將參考新增至 您在上一節中建立的 ServerClass.dll元件。

  5. using在、 Remoting.ChannelsRemoting.Channels.TCP 命名空間上使用 Remoting語句,因此您不需要在程式代碼稍後限定這些命名空間中的宣告。 您必須在任何其他宣告之前使用 using 語句。

    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    
  6. 宣告適當的變數。 宣告並初始化 TcpChannel 對象,這個物件會接聽用戶端連線到特定埠,也就是此範例中的埠 8085。 RegisterChannel使用方法向通道服務註冊通道。 在 MainClass1程式中新增下列宣告程式代碼:

    TcpChannel chan = new TcpChannel(8085);
    ChannelServices.RegisterChannel(chan);
    
  7. RegisterWellKnownType呼叫 物件的 方法RemotingConfiguration,向 Remoting 架構註冊ServerClass物件,並指定下列參數:

    • 正在註冊之物件的完整類型名稱(在此範例中為 ServerClass.myRemoteClass ),後面接著元件名稱 ServerClass。 在這裡指定命名空間的名稱和類別名稱。 因為您在上一節中未指定命名空間,因此會使用預設根命名空間。

    • 將物件發佈為 RemoteTest 的端點命名。 客戶端必須知道此名稱,才能連線到物件。

    • SingleCall使用物件模式來指定最終參數。 物件模式會在伺服器上啟動物件時指定物件的存留期。 如果是 SingleCall 物件,則會針對用戶端所進行的每個呼叫建立 類別的新實例,即使相同的用戶端多次呼叫相同的方法也一次。 另一方面, Singleton 物件只會建立一次,而且所有客戶端都會與相同的對象通訊。

      RemotingConfiguration.RegisterWellKnownServiceType(
      System.Type.GetType("ServerClass.myRemoteClass, ServerClass"),
      "RemoteTest",
      WellKnownObjectMode.SingleCall);
      
  8. ReadLine使用物件的方法Console,讓伺服器應用程式保持執行。

    System.Console.WriteLine("Hit <enter> to exit...");
    System.Console.ReadLine();
    
  9. 建立您的專案。

  10. 儲存並關閉專案。

參考資料

如需 .NET 遠端處理的概觀,請參閱 .NET Framework 開發人員指南檔。