熱點推薦:
您现在的位置: 電腦知識網 >> 網絡技術 >> 正文

如何在Windows服務中承載一個遠程對象

2022-06-13   來源: 網絡技術 

  摘要
  使用 Microsoft NET Framework Remoting 功能生成的遠程對象必須承載在 Microsoft Windows 服務自定義可執行文件或 ASPNET 中以使客戶端應用程序可以訪問這些對象本模塊描述如何在 Windows 服務中承載遠程對象並從客戶端應用程序調用它
  
  預備知識
  在開始使用本模塊之前應了解下列內容
  
  &#; 遠程對象(即使用 NET Remoting 技術遠程訪問的 NET 對象)可以承載在 Windows 服務自定義可執行文件或 ASPNET 中
  
  &#; 客戶端使用 TCP 信道與自定義可執行文件或 Windows 服務中承載的遠程對象通訊
  
  &#; 客戶端使用 HTTP 信道與 ASPNET 中承載的遠程對象通訊
  
  &#; 如果主要考慮安全問題則應在 ASPNET 中承載對象並使用 HTTP 信道這樣您可以從 ASPNET 和 IIS 的底層安全功能中獲益
  
  有關如何在 ASPNET(帶 IIS)中承載遠程對象的信息請參閱 Microsoft 知識庫中編號為 的文章指導性文章在 Microsoft Internet 信息服務中承載遠程對象網址是 x?scid=
  
  &#; 如果主要考慮性能問題則應在 Windows 服務中承載對象並使用 TCP 信道此選項不提供內置的安全性
  
  創建遠程對象類
  此過程創建一個簡單的遠程對象類它提供了一個名為 Add 的簡單方法用於將兩個數字加在一起並返回結果
  
  要創建遠程對象類請執行下列操作
  
  &#; 啟動 Visual Studio NET 並創建一個新的名為 RemoteObject 的 Visual C# 類庫項目
  
  &#; 使用解決方案資源管理器將 classcs 重命名為 Calculatorcs
  
  &#; 在 Calculatorcs 中將 Class 重命名為 Calculator並相應地重命名默認的構造函數
  
  &#; 從 MarshalByRefObject 派生 Calculator 類以便使此類成為遠程的類
  
  public class Calculator : MarshalByRefObject
  
  &#; 將下列公共方法添加到 Calculator 類中
  
  public int Add( int operand int operand )
  {
  return operand + operand;
  }
  
  &#; 在 Build 菜單中單擊 BuildSolution
  
  創建一個 Windows 服務宿主應用程序
  此過程創建一個 Windows 服務應用程序用於承載遠程對象當服務啟動時它將配置 TCP 遠程信道來偵聽客戶端請求
  
  注 此過程使用一個 Installer 類和 Installutilexe 命令行實用工具來安裝 Windows 服務要卸載此服務請運行帶有 /u 開關的 Installutilexe還有另一種方法可以使用安裝和部署項目來幫助安裝和卸載 Windows 服務
  
  要創建 Windows 服務宿主應用程序請執行下列操作
  
  向當前解決方案中添加一個新的名為 RemotingHost 的 Visual C# Windows 服務項目
  
  使用解決方案資源管理器將 Servicecscs 重命名為 RemotingHostcs
  
  在 RemotingHostcs 中將 Service 類重命名為 HostService並相應地重命名默認構造函數
  
  在文件頂部將下列 using 語句添加到現有的 using 語句下
  
  using SystemRuntimeRemoting;
  
  定位到 Main 方法並用下列代碼替換初始化 ServicesToRun 變量的現有代碼行
  
  ServicesToRun = new SystemServiceProcessServiceBase[] {
  new HostService() };
  定位到 InitializeComponent 方法並將 ServiceName 屬性設置為 RemotingHost
  
  thisServiceName = RemotingHost;
  
  定位到 OnStart 方法並添加下列代碼行來配置遠程處理到配置文件的完全限定路徑將作為啟動參數傳遞給服務
  
  RemotingConfigurationConfigure(args[]);
  
  將一個新的 C# 類文件添加到此項目並將其命名為 HostServiceInstaller
  
  添加一個對 SystemConfigurationInstalldll 程序集的程序集引用
  
  將下列 using 語句添加到 HostServiceInstaller 頂部現有 using 語句的下面
  
  using SystemComponentModel;
  using SystemServiceProcess;
  using SystemConfigurationInstall;
  
  從 Installer 類派生 HostServiceInstaller 類
  public class HostServiceInstaller : Installer
  
  在類級添加 RunInstaller 屬性如下所示
  
  [RunInstaller(true)]
  public class HostServiceInstaller : Installer
  
  將下列兩個私有成員變量添加到 HostServiceInstaller 類當安裝此服務時將使用這些對象
  
  private ServiceInstaller HostInstaller;
  private ServiceProcessInstaller HostProcessInstaller;
  
  將下列代碼添加到 HostServiceInstaller 類的構造函數
  
  HostInstaller = new ServiceInstaller();
  HostInstallerStartType = SystemServiceProcessServiceStartModeManual;
  HostInstallerServiceName = RemotingHost;
  HostInstallerDisplayName = Calculator Host Service;
  InstallersAdd (HostInstaller);
  HostProcessInstaller = new ServiceProcessInstaller();
  HostProcessInstallerAccount = ServiceAccountUser;
  InstallersAdd (HostProcessInstaller);
  
  在解決方案管理器內右擊 RemotingHost指向 Add然後單擊 Add New Item
  
  在 Templates 列表中單擊 TextFile 並將此文件命名為 nfig
  
  名為 nfig 的配置文件作為生成過程的一部分由 Visual Studio NET 自動復制到輸出文件夾(例如<projectdir>\bin\debug)並重命名為 <nfig
  
  單擊 OK 添加新配置文件
  
  將下列配置元素添加到新配置文件中
  
  <configuration>
  <systemruntimeremoting>
  <application name=RemoteHostService>
  <service>
  <wellknown type=RemoteObjectCalculator RemoteObject
  objectUri=RemoteObjectCalculator mode=Singleton />
  </service>
  <channels>
  <channel ref=tcp port=>
  <serverProviders>
  <formatter ref=binary />
  </serverProviders>
  </channel>
  </channels>
  </application>
  </systemruntimeremoting>
  </configuration>
  
  在 Build 菜單上單擊 Build Solution
  
  創建一個 Windows 帳戶來運行服務
  此過程創建用於運行 Windows 服務的 Windows 帳戶
  
  要創建一個 Windows 帳戶來運行服務請執行下列操作
  
  創建一個新的名為 RemotingAccount 的本地用戶帳戶輸入密碼並選擇 Password never expires 復選框
  
  在 AdministrativeTools 程序組中單擊 Local Security Policy
  
  使用 LocalSecurityPolicy 工具為此新帳戶授予 Log on as a service 特權
  
  安裝 Windows 服務
  此過程使用 installutilexe 實用工具安裝 Windows 服務然後啟動此服務
  
  要安裝 Windows 服務請執行下列操作
  
  &#; 打開一個命令窗口並將目錄更改到 RemotingHost 項目文件夾下的 Bin\Debug 目錄
  
  &#; 運行 installutilexe 實用工具來安裝此服務
  
  installutilexe remotinghostexe
  
  &#; 在 SetServiceLogin 對話框中輸入此前在前一個過程中創建的帳戶的用戶名和密碼然後單擊 OK
  
  查看 installutilexe 實用工具的輸出並確認此服務已正確安裝
  
  &#; 將 RemoteObjectdll 程序集復制到 RemotingHost 項目輸出目錄(即 RemotingHost\Bin\Debug)
  
  &#; 從 AdministrativeTools 程序組中啟動 Services MMC 管理單元
  
  &#; 在 Services 列表中右擊 Calculator Host Service然後單擊 Properties
  
  &#; 將到服務的配置文件(nfig)的完整路徑輸入到 Start parameters 字段
  
  注 快速執行此操作的方法是選擇並復制 Path to executable字段並將其粘貼到 Startparameters 字段中然後附加nfig字符串
  
  &#; 單擊 Start 啟動服務
  
  &#; 確認服務狀態更改為 Started
  
  &#; 單擊 OK 關閉 Properties 對話框
  
  創建一個測試客戶端應用程序
  此過程創建一個用於調用 Windows 服務內遠程對象的測試控制台應用程序
  
  要創建測試客戶端應用程序請執行下列操作
  
  &#; 將一個名為 RemotingClient 的新 Visual C# 控制台應用程序添加到當前解決方案
  
  &#; 在解決方案資源管理器中右擊 RemotingClient然後單擊 Set as StartUp Project
  
  &#; 添加對 SystemRuntimeRemoti
From:http://tw.wingwit.com/Article/Network/201311/30012.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.