在 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();
  }
 }
}


本文转自 august 51CTO博客,原文链接:http://blog.51cto.com/august/6923,如需转载请自行联系原作者
相关文章
|
4月前
|
开发框架 监控 安全
Windows Defender 导致 Web IIS 服务异常停止排查
某日凌晨IIS服务异常停止,经查为Windows Defender安全补丁KB2267602触发引擎更新,导致系统资源波动,进而引发应用池回收。确认非人为操作,系统无重启。通过分析日志与监控,定位原因为Defender更新后扫描加重负载。解决方案:将IIS及.NET相关路径添加至Defender排除列表,避免业务影响。
568 116
|
NoSQL Redis Windows
windows服务器重装系统之后,Redis服务如何恢复?
windows服务器重装系统之后,Redis服务如何恢复?
344 6
|
11月前
|
Linux iOS开发 MacOS
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
328 0
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2035 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
边缘计算 安全 网络安全
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
1349 4
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
341 9
|
API Docker Windows
2024 Ollama 一站式解决在Windows系统安装、使用、定制服务与实战案例
这篇文章是一份关于Ollama工具的一站式使用指南,涵盖了在Windows系统上安装、使用和定制服务,以及实战案例。
2024 Ollama 一站式解决在Windows系统安装、使用、定制服务与实战案例
|
应用服务中间件 Apache Windows
免安装版的Tomcat注册为windows服务
免安装版的Tomcat注册为windows服务
459 3
|
Java 应用服务中间件 Windows
windows服务器重装系统之后,Tomcat服务如何恢复?
windows服务器重装系统之后,Tomcat服务如何恢复?
310 11

热门文章

最新文章