Windows 服务启动然后立即停止(代码问题?)

Posted

技术标签:

【中文标题】Windows 服务启动然后立即停止(代码问题?)【英文标题】:Windows Service starts then immediately stops (code issue?) 【发布时间】:2013-08-11 14:47:17 【问题描述】:

我使用 WCF 制作了以下服务,并按照 MSDN“making a windows service”教程中的指定方式进行了安装,但是每次我启动服务时,我都会弹出一个提示,指出服务已启动和停止。我想知道为什么会发生这种情况以及如何纠正它。

服务代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;
using RemoteArchiverService;
namespace ORService

    public partial class ORservice : ServiceBase
    
        private ServiceHost ORAHost;
        public ORservice()
        
            InitializeComponent();
        
        protected override void OnStart(string[] args)
        
            if (ORAHost != null)
            
                ORAHost.Close();
            
            // Open the ServiceHostBase to start listening for commands
            ORAHost = new ServiceHost(typeof(OrionWCF));
            ORAHost.Open();
        
        protected override void OnStop()
        
            ORAHost.Close();//stop listening
        
    
    [ServiceContract(Namespace = "http://Blah.Blargh.ServiceBase")]
    public interface IRemoteArchive
    
        //functions
        [OperationContract]
        void CollectFilesAsync(DateTime start, DateTime end);
        [OperationContract]
        void ChangeExpireCheck(int daysToKeep);
        [OperationContract]
        void UpdateActiveProfiles(Profile P, bool AddRemove);
        [OperationContract]
        void UpdateProfileList(Profile P, bool AddRemove);
    
    partial class OrWCF : IRemoteArchive
    
        private List<Profile> ProfileList = new List<Profile>();
        private List<Profile> ActiveProfiles = new List<Profile>();
        private int DaysToKeepData = 30;

        public void UpdateProfileList(Profile P, bool AddRemove)
        
            ...
        
        public void UpdateActiveProfiles(Profile P, bool AddRemove)
        
            ...
        
        public void ChangeExpireCheck(int daysToKeep)
        
            ...
        
        public void CollectFilesAsync(DateTime start, DateTime end)
        
            ...
        
    

日志读出:

服务无法启动。 System.InvalidOperationException:服务 'RemoteService.OrWCF' 的应用程序为零 (非基础设施)端点。这可能是因为没有配置 为您的应用程序找到了文件,或者因为没有服务元素 可以在配置文件中找到匹配的服务名称,或者 因为在服务元素中没有定义端点。在 System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreApplicationEndpoints(ServiceDescription 描述)在 System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription 描述,ServiceHostBase 服务主机)在 System.ServiceModel.ServiceHostBase.InitializeRuntime() 在 System.ServiceModel.ServiceHostBase.OnBeginOpen() 在 System.ServiceModel.ServiceHostBase.OnOpen(时间跨度超时)在 System.ServiceModel.Channels.CommunicationObject.Open(时间跨度 超时)在 System.ServiceModel.Channels.CommunicationObject.Open() 在 RemoteService.ORservice.OnStart(String[] args) 在 C:\Us...

【问题讨论】:

应用程序日志说什么?运行 eventvwr 找出...然后告诉我们。 已编辑以包含日志信息 你的配置没问题吧?你可以加吗?你用什么绑定?端点是什么? 想通了。我没有实施任何托管 【参考方案1】:

启用 WCF 跟踪以查看有关问题的详细信息。

<configuration>
   <system.diagnostics>
      <sources>
            <source name="System.ServiceModel" 
                    switchValue="Information, ActivityTracing"
                    propagateActivity="true">
            <listeners>
               <add name="traceListener" 
                   type="System.Diagnostics.XmlWriterTraceListener" 
                   initializeData= "c:\log\Traces.svclog" />
            </listeners>
         </source>
      </sources>
   </system.diagnostics>
</configuration>

有关 WCF 配置的详细信息,请参阅MSDN。

根据新信息进行编辑: 在 App.Config 文件中找不到 WCF 服务端点配置,请参阅http://msdn.microsoft.com/en-us/library/ms733932.aspx。

【讨论】:

如果有用的话,我只是从事件查看器中添加了日志问题

以上是关于Windows 服务启动然后立即停止(代码问题?)的主要内容,如果未能解决你的问题,请参考以下文章

Windows 服务(托管 WCF 服务)在启动时立即停止

本地计算机上的 Windows 服务启动然后停止错误

如何停止 TCPServer

Erlang 机器立即停止(分发名称冲突?)。服务未重新启动,因为 OnFail 设置为忽略

SonarQube服务启动,运行然后停止?

如何将windows的所有服务启动项启动