C#service:错误启动服务:缺少标准构造函数

时间:2011-11-14 12:51:21

标签: c# .net service

我正在尝试使用net start servicename启动以前安装的服务。

我可以确认服务已成功安装,注册表中的条目以及管理工具区域内的服务概述。

实际上我可以在事件日志中看到一条错误消息,告诉我该服务无法加载,因为它没有标准(无参数)构造函数。

Strack trace的最后两行是以下

bei Test.Service.DbService.OnStart(String[] args)
bei System.ServiceProcess.ServiceBase.ServiceQ...

我按以下方式实施了该服务:

public partial class DbService : ServiceBase
{
    public DbService()
    {
        InitializeComponent();
        this.ServiceName = "Service1";
    }

    protected override void OnStart(string[] args)
    {
        if (serviceHost != null)
            serviceHost.Close();

        Uri[] baseAddress = new Uri[]{
        //new Uri("http://localhost:8000"),
        new Uri("net.pipe://localhost")};

        string PipeName = "Test";

        serviceHost = new ServiceHost(typeof(Kernel), baseAddress);

        // Add a mex endpoint 
        ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
        smb.HttpGetEnabled = true;
        smb.HttpGetUrl = new Uri("http://localhost:8000/DatabaseService/mex");
        serviceHost.Description.Behaviors.Add(smb);



        serviceHost.AddServiceEndpoint(typeof(IDatabase), new NetNamedPipeBinding(), PipeName);

        serviceHost.Open();
    }

    protected override void OnStop()
    {
        // do stuff
    }
}

这就是我最初调用服务的方式:

static void Main()
{
    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[] 
    { 
        new DbService() //new instance of class implementing the service!
    };
    ServiceBase.Run(ServicesToRun);
}

你能证实我这样做了吗?

1 个答案:

答案 0 :(得分:0)

我明白了,我只是意识到这一点。关键是:我重新阅读错误信息几次,直到我认识到它告诉我"服务类型"不包含标准构造函数实际上是完全正确的。这是感兴趣的行:serviceHost = new ServiceHost(typeof(Kernel),baseAddress);班级"内核"不包含标准构造函数,就是这样。我添加了一个没有任何参数的构造函数及其工作。感谢您的想法和支持!