监听从Windows服务中运行的应用程序引发的事件

时间:2016-04-18 23:58:43

标签: c# events windows-services

我正在尝试收听在Windows服务下运行的应用程序引发的事件。下面是示例代码,以演示我正在追求的......

单独的类库代码(classlibrary1.dll)

namespace ClassLibrary1
{
    public class Class1 : MarshalByRefObject
    {
        public event TestServiceDel TestEvent;

        TestEventArgs args1 = new TestEventArgs
        {
            Data = "Hello Buddy ... How Is Life!!!!!"
        };
        public void RaiseEvent()
        {
            if (!EventLog.SourceExists("TestService"))
                EventLog.CreateEventSource("TestService", "Application");

            EventLog.WriteEntry("TestService","Before raising event ...");

            if (TestEvent != null)
                TestEvent(this, args1);

            EventLog.WriteEntry("TestService","After raising event ...");
        }
    }

托管Windows服务(windowsservice1exe)

public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        System.Threading.Thread.Sleep(1000);
        ClassLibrary1.Class1 cs = new ClassLibrary1.Class1();
        cs.RaiseEvent();
     }

客户端应用程序(consoleapp1.exe)

class Program : MarshalByRefObject
{
    static void Main(string[] args)
    {
        Class1 cs = new Class1();
        cs.TestEvent += Cs_TestEvent;
        Console.ReadLine();
    }

    private static void Cs_TestEvent(object sender, TestEventArgs args)
    {
        EventLog.WriteEntry("TestService",args.Data, EventLogEntryType.Information);
        Console.WriteLine(args.Data);
    }

正如您所看到的,我已尝试为发布者/订阅者子类化MarshalByRefObject,但它不起作用。我的意思是我可以在事件日志中看到事件正在被引发但我的客户端应用程序从未收到通知(或)通知永远不会到达。

请告诉我如何实现这一目标。

由于我的服务和客户端都在同一台机器上运行,我相信我不需要使用Remoting。正确?

0 个答案:

没有答案