尝试启动服务时出现零应用程序端点错误

时间:2013-07-08 06:01:56

标签: c# .net visual-studio-2008 windows-services

我认为我确实已经检查了所有可能性,但当我尝试启动我的服务时,我仍然一直收到此错误(用eventvwr编写):

  

无法启动服务。 System.InvalidOperationException:服务   'NexolNotifierWinService.NexolNotifier'没有应用程序   (非基础设施)端点。这可能是因为没有配置   找到了您的应用程序的文件,或者因为没有服务元素   匹配服务名称可以在配置文件中找到,或者   因为没有在服务元素中定义端点。

使用installutil可以顺利进行服务安装。

我真的不确定我为什么会遇到这个错误。它只是一个简单的Windows服务项目,所以没有任何app.config可以搞乱。

这是我的代码:

Program.cs的

static class Program
{
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] 
        { 
            new NexolNotifierService() 
        };
        ServiceBase.Run(ServicesToRun);
    }
}

NexolNotifierService.cs

public partial class NexolNotifierService : ServiceBase
{
    private ServiceHost host;
    public NexolNotifierService()
    {
        InitializeComponent();
        this.ServiceName = "NexolNotifierService";
    }

    protected override void OnStart(string[] args)
    {
        Type serviceType = typeof(NexolNotifier);
        host = new ServiceHost(serviceType);
        host.Open();
    }

    protected override void OnStop()
    {
        if (host != null)
            host.Close();
    }
}

ProjectInstaller.Designer.cs(用于安装服务)

private void InitializeComponent()
    {
        this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
        this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
        // 
        // serviceProcessInstaller1
        // 
        this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem; 
        this.serviceProcessInstaller1.Password = null;
        this.serviceProcessInstaller1.Username = null;
        // 
        // serviceInstaller1
        // 
        this.serviceInstaller1.ServiceName = "NexolNotifierService";
        this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
        // 
        // ProjectInstaller
        // 
        this.Installers.AddRange(new System.Configuration.Install.Installer[] {
        this.serviceProcessInstaller1,
        this.serviceInstaller1});

    }

和我的实际服务:

NexolNotifier.cs

public class NexolNotifier
{
    public NexolNotifier()
    {
        ....
    }

在Visual Studio 2008中添加新项目> Windows服务添加了服务。

我只是想让一个非常简单的Windows服务工作。从我所看到的,没有理由说这不起作用。

2 个答案:

答案 0 :(得分:1)

您想做什么?

如果你只想要一个普通 Windows服务 - 没有通信,没有 - 那么你不需要ServiceHost你只需要从.NET框架中的ServiceBase类,并实现/覆盖一些方法 - 这就是全部。从数据库中读取值,对它们执行某些操作,发送电子邮件 - 无论如何 - 您将从不需要ServiceHost

如果您使用ServiceHost,那么您正在使用 WCF基础架构,这意味着您正在编写自托管的Web服务。

所以你想做什么,真的吗?

Windows服务应该做的任务/工作是什么? ServiceHost 没有与纯 Windows服务! ServiceHost == WCF - 总是如此。对于普通的Windows服务,您 <{1}}

对于仅普通Windows服务(无WCF),请参阅例如

许多,很多更多样本。两个示例都显示了一个普通的Windows服务,没有WCF,没有ServiceHost 在任何地方。

答案 1 :(得分:0)

从像这样的代码中添加服务端点

       Uri baseAddress = new Uri("http://localhost:8095/Service");
        serviceHost = new ServiceHost( typeof(YourService), baseAddress );
        serviceHost.AddServiceEndpoint( typeof(IYourService), new BasicHttpBinding(), baseAddress );
        serviceHost.Open();