摘要 使用 Microsoft
NET Framework Remoting 功能生成的遠程對象必須承載在 Microsoft Windows 服務
自定義可執行文件或 ASP
NET 中
以使客戶端應用程序可以訪問這些對象
本模塊描述如何在 Windows 服務中承載遠程對象並從客戶端應用程序調用它
預備知識 在開始使用本模塊之前
應了解下列內容
; 遠程對象(即使用
NET Remoting 技術遠程訪問的
NET 對象)可以承載在 Windows 服務
自定義可執行文件或 ASP
NET 中
; 客戶端使用 TCP 信道與自定義可執行文件或 Windows 服務中承載的遠程對象通訊
; 客戶端使用 HTTP 信道與 ASP
NET 中承載的遠程對象通訊
; 如果主要考慮安全問題
則應在 ASP
NET 中承載對象並使用 HTTP 信道
這樣您可以從 ASP
NET 和 IIS 的底層安全功能中獲益
有關如何在 ASP
NET(帶 IIS)中承載遠程對象的信息
請參閱 Microsoft 知識庫中編號為
的文章
指導性文章
在 Microsoft Internet 信息服務中承載遠程對象
網址是 x?scid=
; 如果主要考慮性能問題
則應在 Windows 服務中承載對象並使用 TCP 信道
此選項不提供內置的安全性
創建遠程對象類 此過程創建一個簡單的遠程對象類
它提供了一個名為 Add 的簡單方法
用於將兩個數字加在一起並返回結果
要創建遠程對象類
請執行下列操作
; 啟動 Visual Studio
NET 並創建一個新的名為 RemoteObject 的 Visual C# 類庫項目
; 使用解決方案資源管理器將 class
cs 重命名為 Calculator
cs
; 在 Calculator
cs 中
將 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 類和 Installutil
exe 命令行實用工具來安裝 Windows 服務
要卸載此服務
請運行帶有 /u 開關的 Installutil
exe
還有另一種方法
可以使用
安裝和部署項目
來幫助安裝和卸載 Windows 服務
要創建 Windows 服務宿主應用程序
請執行下列操作
向當前解決方案中添加一個新的名為 RemotingHost 的 Visual C# Windows 服務項目
使用解決方案資源管理器將 Service
cs
cs 重命名為 RemotingHost
cs
在 RemotingHost
cs 中
將 Service
類重命名為 HostService
並相應地重命名默認構造函數
在文件頂部
將下列 using 語句添加到現有的 using 語句下
using System
Runtime
Remoting;
定位到 Main 方法
並用下列代碼替換初始化 ServicesToRun 變量的現有代碼行
ServicesToRun = new System
ServiceProcess
ServiceBase[] {
new HostService() };
定位到 InitializeComponent 方法
並將 ServiceName 屬性設置為 RemotingHost
this
ServiceName =
RemotingHost
;
定位到 OnStart 方法
並添加下列代碼行來配置遠程處理
到配置文件的完全限定路徑將作為啟動參數傳遞給服務
RemotingConfiguration
Configure(args[
]);
將一個新的 C# 類文件添加到此項目
並將其命名為 HostServiceInstaller
添加一個對 System
Configuration
Install
dll 程序集的程序集引用
將下列 using 語句添加到 HostServiceInstaller 頂部現有 using 語句的下面
using System
ComponentModel;
using System
ServiceProcess;
using System
Configuration
Install;
從 Installer 類派生 HostServiceInstaller 類
public class HostServiceInstaller : Installer
在類級添加 RunInstaller 屬性
如下所示
[RunInstaller(true)]
public class HostServiceInstaller : Installer
將下列兩個私有成員變量添加到 HostServiceInstaller 類
當安裝此服務時將使用這些對象
private ServiceInstaller HostInstaller;
private ServiceProcessInstaller HostProcessInstaller;
將下列代碼添加到 HostServiceInstaller 類的構造函數
HostInstaller = new ServiceInstaller();
HostInstaller
StartType = System
ServiceProcess
ServiceStartMode
Manual;
HostInstaller
ServiceName =
RemotingHost
;
HostInstaller
DisplayName =
Calculator Host Service
;
Installers
Add (HostInstaller);
HostProcessInstaller = new ServiceProcessInstaller();
HostProcessInstaller
Account = ServiceAccount
User;
Installers
Add (HostProcessInstaller);
在解決方案管理器內
右擊 RemotingHost
指向 Add
然後單擊 Add New Item
在 Templates 列表中
單擊 TextFile 並將此文件命名為 nfig
名為 nfig 的配置文件作為生成過程的一部分由 Visual Studio
NET 自動復制到輸出文件夾(例如
<projectdir>\bin\debug)
並重命名為 <nfig
單擊 OK 添加新配置文件
將下列配置元素添加到新配置文件中
<configuration>
<system
runtime
remoting>
<application name=
RemoteHostService
>
<service>
<wellknown type=
RemoteObject
Calculator
RemoteObject
objectUri=
RemoteObject
Calculator
mode=
Singleton
/>
</service>
<channels>
<channel ref=
tcp
port=
>
<serverProviders>
<formatter ref=
binary
/>
</serverProviders>
</channel>
</channels>
</application>
</system
runtime
remoting>
</configuration>
在 Build 菜單上
單擊 Build Solution
創建一個 Windows 帳戶來運行服務
此過程創建用於運行 Windows 服務的 Windows 帳戶
要創建一個 Windows 帳戶來運行服務
請執行下列操作
創建一個新的名為 RemotingAccount 的本地用戶帳戶
輸入密碼並選擇 Password never expires 復選框
在 AdministrativeTools 程序組中
單擊 Local Security Policy
使用 LocalSecurityPolicy 工具為此新帳戶授予 Log on as a service 特權
安裝 Windows 服務 此過程使用 installutil
exe 實用工具安裝 Windows 服務
然後啟動此服務
要安裝 Windows 服務
請執行下列操作
; 打開一個命令窗口
並將目錄更改到 RemotingHost 項目文件夾下的 Bin\Debug 目錄
; 運行 installutil
exe 實用工具來安裝此服務
installutil
exe remotinghost
exe
; 在 SetServiceLogin 對話框中
輸入此前在前一個過程中創建的帳戶的用戶名和密碼
然後單擊 OK
查看 installutil
exe 實用工具的輸出
並確認此服務已正確安裝
; 將 RemoteObject
dll 程序集復制到 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
; 添加對 System
Runtime
Remoti
From:http://tw.wingwit.com/Article/Network/201311/30012.html