如何从客户端计算机将参数传递给Windows服务

时间:2013-12-05 04:41:22

标签: c# windows-services error-logging

我想从Windows服务编写错误日志。我知道从windows服务调用一个customcommand,但它不允许任何参数。我想将我的错误消息传递给服务,customcommand将写入日志。我该怎么做。我试了一下

  

我在我的库类中创建了一个静态字符串变量。   每当发生错误时,我都会调用函数

ATELib.AteBAC.getErrorMessage = "error message from client";
ServiceController Controller = new ServiceController("ATELogsService");
if (Controller.Status == ServiceControllerStatus.Running)
{
    Controller.ExecuteCommand(128);
}

我服务中的代码是

protected override void OnCustomCommand(int command)
{
    if (command == 128)
    {
        using (System.IO.StreamWriter file = new System.IO.StreamWriter(Application.StartupPath + @"\ATELogCheck.txt", true))
        {
            file.WriteLine(ATELib.AteBAC.getErrorMessage);
            ATELib.AteBAC.getErrorMessage = null;
        }
    }
}

它正在创建错误日志文件(ATELogCheck.txt),但文件中没有错误消息(字符串值),从而创建一个空的txt文件。它是一个静态变量,甚至为什么它是空的。我正在使用tcp协议并将服务对象称为

baCls = (ATELib.AteBAC)Activator.GetObject(typeof(ATELib.AteBAC), "tcp://localhost:9090/ATE");

如何将字符串值传递给服务?

1 个答案:

答案 0 :(得分:-1)

因为您的服务在与您的应用程序不同的域中运行。因此,您的应用中的ATELib.AteBAC.getErrorMessage与您服务中的ATELib.AteBAC.getErrorMessage不同。

老实说,如果你不得不做这样的事情,你的应用程序设计就会遇到问题。这项服务真的可以不断地做点什么。或者,它可以“睡眠”并收听TCP端口。收到信号后,它就可以找到工作并执行。当然,在进入不必要的复杂性之前先考虑设计。