分享
 
 
 

如何在Windows服务中承载一个远程对象

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

摘要

使用 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 知识库中编号为 312107 的文章“指导性文章:在 Microsoft Internet 信息服务中承载远程对象”,网址是 http://support.microsoft.com/default.aspx?scid=312107。

• 如果主要考虑性能问题,则应在 Windows 服务中承载对象并使用 TCP 信道。此选项不提供内置的安全性。

创建远程对象类

此过程创建一个简单的远程对象类。它提供了一个名为 Add 的简单方法,用于将两个数字加在一起并返回结果。

要创建远程对象类,请执行下列操作:

• 启动 Visual Studio .NET 并创建一个新的名为 RemoteObject 的 Visual C# 类库项目。

• 使用解决方案资源管理器将 class1.cs 重命名为 Calculator.cs。

• 在 Calculator.cs 中,将 Class1 重命名为 Calculator,并相应地重命名默认的构造函数。

• 从 MarshalByRefObject 派生 Calculator 类,以便使此类成为远程的类。

public class Calculator : MarshalByRefObject

• 将下列公共方法添加到 Calculator 类中。

public int Add( int operand1, int operand2 )

{

return operand1 + operand2;

}

• 在 Build 菜单中,单击 BuildSolution。

创建一个 Windows 服务宿主应用程序

此过程创建一个 Windows 服务应用程序,用于承载远程对象。当服务启动时,它将配置 TCP 远程信道来侦听客户端请求。

注 此过程使用一个 Installer 类和 Installutil.exe 命令行实用工具来安装 Windows 服务。要卸载此服务,请运行带有 /u 开关的 Installutil.exe。还有另一种方法,可以使用“安装和部署项目”来帮助安装和卸载 Windows 服务。

要创建 Windows 服务宿主应用程序,请执行下列操作

1.向当前解决方案中添加一个新的名为 RemotingHost 的 Visual C# Windows 服务项目。

2.使用解决方案资源管理器将 Service1.cs.cs 重命名为 RemotingHost.cs。

3.在 RemotingHost.cs 中,将 Service1 类重命名为 HostService,并相应地重命名默认构造函数。

4.在文件顶部,将下列 using 语句添加到现有的 using 语句下。

using System.Runtime.Remoting;

5.定位到 Main 方法,并用下列代码替换初始化 ServicesToRun 变量的现有代码行。

ServicesToRun = new System.ServiceProcess.ServiceBase[] {

new HostService() };

6.定位到 InitializeComponent 方法,并将 ServiceName 属性设置为 RemotingHost。

this.ServiceName = "RemotingHost";

7.定位到 OnStart 方法,并添加下列代码行来配置远程处理。到配置文件的完全限定路径将作为启动参数传递给服务。

RemotingConfiguration.Configure(args[0]);

8.将一个新的 C# 类文件添加到此项目,并将其命名为 HostServiceInstaller。

9.添加一个对 System.Configuration.Install.dll 程序集的程序集引用。

10.将下列 using 语句添加到 HostServiceInstaller 顶部现有 using 语句的下面。

using System.ComponentModel;

using System.ServiceProcess;

using System.Configuration.Install;

11.从 Installer 类派生 HostServiceInstaller 类。

public class HostServiceInstaller : Installer

12.在类级添加 RunInstaller 属性,如下所示:

[RunInstaller(true)]

public class HostServiceInstaller : Installer

13.将下列两个私有成员变量添加到 HostServiceInstaller 类。当安装此服务时将使用这些对象。

private ServiceInstaller HostInstaller;

private ServiceProcessInstaller HostProcessInstaller;

14.将下列代码添加到 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);

15.在解决方案管理器内,右击 RemotingHost,指向 Add,然后单击 Add New Item。

16.在 Templates 列表中,单击 TextFile 并将此文件命名为 app.config。

名为 app.config 的配置文件作为生成过程的一部分由 Visual Studio .NET 自动复制到输出文件夹(例如,<projectdirindebug),并重命名为 <applicationname.config。

17.单击 OK 添加新配置文件。

18.将下列配置元素添加到新配置文件中。

<configuration

<system.runtime.remoting

<application name="RemoteHostService"

<service

<wellknown type="RemoteObject.Calculator, RemoteObject"

objectUri="RemoteObject.Calculator" mode="Singleton" /

</service

<channels

<channel ref="tcp" port="8085"

<serverProviders

<formatter ref="binary" /

</serverProviders

</channel

</channels

</application

</system.runtime.remoting

</configuration

19.在 Build 菜单上,单击 Build Solution。

创建一个 Windows 帐户来运行服务

此过程创建用于运行 Windows 服务的 Windows 帐户。

要创建一个 Windows 帐户来运行服务,请执行下列操作:

1.创建一个新的名为 RemotingAccount 的本地用户帐户。输入密码并选择 Password never expires 复选框。

2.在 AdministrativeTools 程序组中,单击 Local Security Policy。

3.使用 LocalSecurityPolicy 工具为此新帐户授予 Log on as a service 特权。

安装 Windows 服务

此过程使用 installutil.exe 实用工具安装 Windows 服务,然后启动此服务。

要安装 Windows 服务,请执行下列操作:

• 打开一个命令窗口,并将目录更改到 RemotingHost 项目文件夹下的 BinDebug 目录。

• 运行 installutil.exe 实用工具来安装此服务。

installutil.exe remotinghost.exe

• 在 SetServiceLogin 对话框中,输入此前在前一个过程中创建的帐户的用户名和密码,然后单击 OK。

查看 installutil.exe 实用工具的输出,并确认此服务已正确安装。

• 将 RemoteObject.dll 程序集复制到 RemotingHost 项目输出目录(即 RemotingHostBinDebug)。

• 从 AdministrativeTools 程序组中,启动 Services MMC 管理单元。

• 在 Services 列表中,右击 Calculator Host Service,然后单击 Properties。

• 将到服务的配置文件(remotinghost.exe.config)的完整路径输入到 Start parameters 字段。

注 快速执行此操作的方法是选择并复制 Path to executable字段,并将其粘贴到 Startparameters 字段中。然后,附加“.config”字符串。

• 单击 Start 启动服务。

• 确认服务状态更改为 Started。

• 单击 OK 关闭 Properties 对话框。

创建一个测试客户端应用程序

此过程创建一个用于调用 Windows 服务内远程对象的测试控制台应用程序。

要创建测试客户端应用程序,请执行下列操作:

• 将一个名为 RemotingClient 的新 Visual C# 控制台应用程序添加到当前解决方案。

• 在解决方案资源管理器中,右击 RemotingClient,然后单击 Set as StartUp Project。

• 添加对 System.Runtime.Remoti

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有