摘要使用 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 属性设置为 RemotingHostthisServiceName = 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 RemoteObjectobjectUri=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
|