我认为我确实已经检查了所有可能性,但当我尝试启动我的服务时,我仍然一直收到此错误(用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服务工作。从我所看到的,没有理由说这不起作用。
答案 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();