文章編號: 818780 - 上次校閱: 2007年8月28日 - 版次: 3.5

如何使用 Visual C++.NET 或 Visual C++ 2005年建立遠端伺服器

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

結論

本文將逐步告訴您,如何建立簡單的遠端伺服器,另一個應用程式可以存取的。存取伺服器應用程式可以是位於同一部電腦上、 不同的電腦或不同的網路。遠端伺服器劃分兩個部份:
  • 伺服器物件
  • 伺服器應用程式
伺服器物件是物件,用戶端會與,進行通訊,伺服器應用程式用來以.NET Framework 遠端處理註冊伺服器物件。


其他相關資訊

需求

下列清單列出建議的硬體、 軟體、 網路基礎結構及您需要的服務套件:
  • Microsoft Visual Studio.NET 或 Microsoft Visual Studio 2005
  • Microsoft.NET Framework
本文假設您已熟悉下列主題:
  • Microsoft Visual Studio.NET 或 Microsoft Visual Studio 2005
  • Microsoft Visual C++.NET 或 Microsoft Visual C++ 2005
  • 網路功能

建立遠端伺服器物件

若要建立伺服器應用程式,您必須先建立伺服器物件。伺服器物件是什麼用戶端應用程式會具現化,然後再使用與伺服器電腦通訊。用戶端應用程式會透過用戶端會建立的 Proxy 物件。在此範例伺服器物件位於類別庫 (.dll),為 myRemoteClass]。
  1. 在 Visual C++.NET 或 Visual C++ 2005年,請建立一個新 Managed C + + 類別庫。專案 ServerClass 的名稱。依照預設值,會建立類別 1。
  2. 開啟 ServerClass.h,然後再將 類別 1 重新命名為 myRemoteClass

    重新命名的 myRemoteClass 必須繼承自 MarshalByRefObject 類別。您的類別現在會出現,如下所示:
    namespace ServerClass
    {
      public __gc class myRemoteClass: public MarshalByRefObject
      {
        public:
        myRemoteClass()
        {
        }
      };
    }
    
    附註 您必須加入通用語言執行階段支援編譯器選項 (/ clr:oldSyntax) 在 Visual C++ 2005 成功編譯先前的程式碼範例中。若要在 Visual C++ 2005年中加入常用的語言執行階段支援編譯器選項,請依照下列步驟執行:
    1. 按一下 [專案,] 然後按一下 [<ProjectName> 屬性

      附註<ProjectName> 是專案的名稱的預留位置。
    2. 展開 [組態屬性,] 然後按一下 [一般
    3. 按一下以選取 通用語言執行階段支援、 舊語法 (/ clr:oldSyntax)通用語言執行階段支援 的專案設定中在右窗格中,按一下 套用,],然後再按一下 [確定]
    如需有關通用語言執行階段支援編譯器選項,請造訪下列 Microsoft 網站:
    / clr (通用語言執行階段編譯)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx (http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx)
  3. 將公用方法加入至 myRemoteClass 採用字串、 顯示訊息給具有字串值主控台並再傳回 True 如果字串不是空的
    bool SetString(String* sTemp)
    {
      try
      {
        Console::WriteLine("This string '{0}' has a length of {1}", sTemp, (sTemp->get_Length()).ToString());
        return (sTemp->get_Length() != 0? true:false) ;
      }
      catch(Exception* ex)
      {
        Console::WriteLine(ex->Message);
        return false;
      }
    }
    
  4. 建置專案以建立 ServerClass.dll 組件。
  5. 儲存並關閉專案。

建立遠端伺服器應用程式

建立伺服器物件與用戶端進行通訊後,註冊此物件與.NET Framework 遠端處理。當您註冊物件時,您也必須啟動該伺服器,並確定伺服器會在用戶端連線到該連接埠的連接埠上接聽。若要執行此動作,您必須使用輸出可執行檔的專案類型。

您可以輕易地從用戶端專案參考伺服器物件,請在個別的專案中包含伺服器的物件。如果您在這個專案中包含伺服器物件,您不能參照因為參考只能.dll 檔案來設定。
  1. 建立新的主控台應用程式專案在 Visual C++.NET 或新 CLR 的主控台應用程式在 Visual C++ 2005年中啟動遠端伺服器時。 專案 ServerObjectRef 的名稱。
  2. 開啟 ServerObjectRef.cpp 程式碼檔案。若要將 系統命名空間 的參考和 System.Runtime.Remoting 命名空間加入至專案中使用下列程式碼:
    #using <System.Dll>
    #using <System.Runtime.Remoting.Dll>
  3. 使用下列程式碼加入至您在先前的 < > 一節所建立的 ServerClass.dll 組件參考:
    #using <ServerClass.dll>
    附註 若要指定組件搜尋路徑,請依照下列步驟執行:
    1. 開啟專案] 的 [屬性頁] 對話方塊。
    2. 開啟 [C/C + +] 資料夾。
    3. 按一下 [一般] 索引標籤。
    4. 修改 解析 # using 參考] 屬性到 ServerClass.dll 組件存在的資料夾。
  4. 使用 使用 陳述式在 遠端處理 命名空間、 Remoting.Channels] 命名空間和 Remoting.Channels.TCP 命名空間讓您不需要限定在稍後的程式碼中的這些命名空間中宣告。您必須使用 使用 陳述式之前任何其他宣告釐
    using namespace System::Runtime;
    using namespace System::Runtime::Remoting;
    using namespace System::Runtime::Remoting::Channels;
    using namespace System::Runtime::Remoting::Channels::Tcp;
    
  5. 將適當的變數宣告。宣告,並初始化 TcpChannel 物件,用戶端連線特定連接埠上接聽。在這個範例是連接埠 8085。使用 RegisterChannel 方法來使用通道服務登錄通道。主要 的函式中加入下列程式碼,宣告:
    TcpChannel* chan = new TcpChannel(8085);
    ChannelServices::RegisterChannel(chan);
    
  6. 呼叫以.NET Framework 遠端處理登錄 ServerClass 物件 RemotingConfiguration 物件 RegisterWellKnownServiceType 方法。指定下列參數:
    • 指定登錄為已知的型別物件的類型。這個範例中 __typeof 關鍵字用來取得 ServerClass.myRemoteClass 類型。
    • 命名才能發行成 RemoteTest 物件端點。用戶端必須知道這個名稱來連線到該物件。
    • 若要指定最後的參數使用 SingleCall 物件模式。在伺服器上啟動時,物件模式會指定物件的存留期。使用一個 SingleCall 物件時即使相同的用戶端呼叫相同的方法一次以上,將建立新的執行個體類別的用戶端發出,每個呼叫。相反地,Singleton 物件會建立一次並與通訊所有用戶端
      Type * objType = __typeof(ServerClass);
      RemotingConfiguration::RegisterWellKnownServiceType( objType, 
      	"RemoteTest", 
      	WellKnownObjectMode::SingleCall);
      
      同一個物件。
  7. 使用 主控台 物件的 ReadLine 方法來保留伺服器應用程式執行
    System::Console::WriteLine("Hit <enter> to exit...");
    System::Console::ReadLine();
    
  8. 建置您的專案。
  9. 儲存,然後再關閉您的專案。

測試伺服器物件

您剛建立如需有關如何使用伺服器物件建立通訊用戶端應用程式的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項件:
818781? (http://support.microsoft.com/kb/818781/ ) 如何: 使用 Visual C++.NET 建立遠端伺服器的用戶端存取選項

?考

如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
818062? (http://support.microsoft.com/kb/818062/ ) 封送如何: 處理物件到遠端伺服器以傳址藉由使用 Visual C++.NET
如需有關 TCPChannel 類別和 RegisterWellKnownServiceType 方法的詳細資訊,請造訪下列 MSDN 網站:
TcpChannel 類別
http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.channels.tcp.tcpchannel(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.channels.tcp.tcpchannel(vs.71).aspx)
RemotingConfiguration.RegisterWellKnownServiceType 方法
http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.remotingconfiguration.registerwellknownservicetype(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.remotingconfiguration.registerwellknownservicetype(vs.71).aspx)

如加法需有關快速入門教學課程資訊,請造訪下列 Microsoft 網站:
Microsoft.NET 架構 SDK 快速入門教學課程
http://quickstarts.asp.net/QuickStartv20/default.aspx (http://quickstarts.asp.net/QuickStartv20/default.aspx)
如需關於遠端處理的詳細資訊,請參閱 Microsoft.NET Framework 開發人員指南 》 文件。


這篇文章中的資訊適用於:
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
關鍵字:?
kbmt kbtunneling kbchannels kbhowtomaster kbhowto KB818780 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:818780? (http://support.microsoft.com/kb/818780/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。