在 windows 服务中驻留远程对象

Windows服务与远程对象示例
本文介绍如何创建Windows服务并实现远程对象调用。通过示例代码展示了一个名为MathService的服务项目,该服务能够执行数学运算并将操作记录写入事件日志。此外,还介绍了如何安装和卸载Windows服务,以及如何使用客户端程序调用服务。
 因为控制台应用程序不能由windows服务提供,因此不要尝试读取或写入到控制台。可以使用windows服务向文件或者事件日志发送跟踪或错误消息。System.Diagnostics.EventLog类提供了对windows事件日志读写的方法。
   下面是远程对象使用的程序集: MathLibrary.dll
using System;
using System.Runtime.Remoting;
using System.Diagnostics;
namespace MathLibrary
{
 /// <summary>
 /// SimpleMath 的摘要说明。
 /// </summary>
 public class SimpleMath : MarshalByRefObject
 {
  public SimpleMath()
  {
   WriteLogEntry("SimpleMath actor called");                                                                            
  }
  public int Add(int n1,int n2)
  {
   WriteLogEntry(string.Format("SimpleMath.Add({0},{1})",n1,n2));                           return n1 + n2;
  }
  public int Subtract(int n1,int n2)
  {
   WriteLogEntry(string.Format("SimpleMath.Subtract({0},{1})",n1,n2));                   return n1 - n2;
  }
  public void WriteLogEntry(string msg){
   EventLog.WriteEntry("MathService",msg);
  }
 }
}
建立windows服务:
新建立一个windows服务项目,命名为 MathService,下面是OnStart()方法中的对远程对象的注册:
  protected override void OnStart(string[] args)
  {
   HttpChannel channel = new HttpChannel(13101);
   ChannelServices.RegisterChannel(channel);
   RemotingConfiguration.RegisterWellKnownServiceType(typeof(MathLibrary.SimpleMath),"SimpleMath.soap",WellKnownObjectMode.Singleton);
  }
通过Installutil.exe可以安装或卸载windows服务。
Installutil directory\MathService.exe  //安装
Installutil directory\MathService.exe  //卸载
启动windows服务后,可以利用下面的客户端测试,同时,可以在事件查看器中查看相应的消息。
客户端程序:
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using MathLibrary;
namespace MathClient
{
 /// <summary>
 /// ClientMain 的摘要说明。
 /// </summary>
 class ClientMain
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   HttpChannel channel = new HttpChannel();
   ChannelServices.RegisterChannel(channel);
   object remoteObj = Activator.GetObject(typeof(MathLibrary.SimpleMath)," [url]http://localhost:13101/SimpleMath.soap[/url]");
   SimpleMath math = (SimpleMath)remoteObj;
   do{
    Console.WriteLine(" 5 + 2 = {0}",math.Add(5,2));
    Console.WriteLine(" 5 - 2 = {0}",math.Subtract(5,2));
   }while(Console.ReadLine() != "q");
   Console.WriteLine("Press Enter to end");
   Console.ReadLine();
  }
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值