当我尝试启动服务时,应用程序终结点错误为零
本文关键字:应用程序 结点 错误 启动 服务 | 更新日期: 2023-09-27 18:21:21
我想我确实已经检查了所有的可能性,但当我试图启动我的服务时,我仍然会收到这个错误(写在eventvwr中):
无法启动服务。System.InvalidOperationException:服务"NexolNotifierWinService.NexolNotifier"没有应用程序(非基础设施)端点。这可能是因为没有配置找不到应用程序的文件,或者因为没有服务元素在配置文件中可以找到与服务名称匹配的名称,或者因为在服务元素中没有定义端点。
使用installutil可以顺利安装服务。
我真的不知道我为什么会犯这个错误。这只是一个简单的Windows服务项目,所以也没有app.config可以乱用。
这是我的代码:
程序.cs
static class Program
{
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new NexolNotifierService()
};
ServiceBase.Run(ServicesToRun);
}
}
NexolNotificationService.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});
}
以及我的实际服务:
NexolNotification.cs
public class NexolNotifier
{
public NexolNotifier()
{
....
}
服务是从Visual Studio 2008中的"添加新项目"->"Windows服务"添加的。
我只是想让一个非常简单的windows服务正常工作。据我所见,没有任何理由不这样做。
您想做什么
如果您只想要普通Windows服务-没有通信,什么都不需要-那么您就不需要ServiceHost
您只需要从.NET框架中的ServiceBase
类派生,并实现/覆盖其中的一些方法,仅此而已。从数据库中读取值,用它们做点什么,发送电子邮件-不管怎样-您永远不需要ServiceHost
!
如果您使用ServiceHost
,那么您使用的是WCF基础架构,这意味着您正在编写一个自托管的web服务。
那么你真的想做什么
你的Windows服务应该做什么任务/工作??ServiceHost
与普通的Windows服务没有任何关系ServiceHost
==WCF-始终。对于普通的Windows服务,您不需要ServiceHost
对于纯Windows服务(无WCF),请参见例如
- 创建基本Windows服务
- 简单的Windows服务示例
以及许多、许多更多的样本。两个示例都只显示了一个普通的Windows服务,没有WCF,任何地方都看不到ServiceHost
。
从类似的代码中添加服务端点
Uri baseAddress = new Uri("http://localhost:8095/Service");
serviceHost = new ServiceHost( typeof(YourService), baseAddress );
serviceHost.AddServiceEndpoint( typeof(IYourService), new BasicHttpBinding(), baseAddress );
serviceHost.Open();