Служба C #: ошибка запуска службы: отсутствует стандартный конструктор - PullRequest
0 голосов
/ 14 ноября 2011

Я пытаюсь запустить ранее установленную службу, используя net start servicename.

Я могу подтвердить, что служба была успешно установлена, в реестре и в обзоре службы есть записи в области инструментов администрирования..

На самом деле я вижу сообщение об ошибке в журнале событий, сообщающее, что служба не может быть загружена, поскольку у нее нет стандартного (без параметров) конструктора.

Последние две строки трассировки:

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 голосов
/ 26 января 2012

Я понял, это было так просто, что я просто знал об этом. Ключ: я перечитывал сообщение об ошибке пару раз, пока не понял, что он говорит мне, что «тип службы» не содержит стандартного конструктора, что на самом деле совершенно правильно. это интересная линия: serviceHost = new ServiceHost (typeof (Kernel), baseAddress); класс "Ядро" не содержит стандартного конструктора, вот и все. Я добавил конструктор без каких-либо параметров, и он работает. Спасибо за ваши идеи и вашу поддержку!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...