【发布时间】:2015-03-09 12:21:44
【问题描述】:
我正在开发一个托管 WCF-webservice 的 Windows 服务,当我在调试模式下运行它时它可以工作:
#if DEBUG
SynchroService myService = new SynchroService();
myService.OnDebugStart();
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new SynchroService()
};
ServiceBase.Run(ServicesToRun);
#endif
OnDebugStart() 只是调用 Windows 服务的 OnStart() 方法,而运行的线程只是一个无限运行的线程(直到调用 OnStop()),以检查服务是否仍然存在且在线。
protected override void OnStart(string[] args)
{
try
{
ServiceStatus serviceStatus = new ServiceStatus();
serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
SetServiceStatus(this.ServiceHandle, ref serviceStatus);
syncService = new SynchroComService();
myServiceHost = new ServiceHost(syncService);
myServiceHost.Open();
syncService.StartListening();
thread = new Thread(CheckHost);
thread.Start();
serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
SetServiceStatus(this.ServiceHandle, ref serviceStatus);
}
catch (Exception ex)
{
WriteError(ex);
}
}
现在,当我创建 WCF 服务 (syncService) 时,它应该运行代码来启动 SQLDependency 并开始监听数据库。当我在调试模式下启动它时,它工作得非常好,但是当我在发行版中运行它时,服务被托管,但代码不执行。
我到处寻找相同类型的答案或问题,但我一无所获。因此,如果有人遇到过相同类型的问题,请务必告诉您您是如何解决的。
亲切的问候
【问题讨论】:
-
一旦遇到这个问题,调试模式可以完美运行。问题是服务启动类型设置为网络而不是本地系统。确保您的服务符合您的要求。详细查看服务启动类型,然后设置最适合的。也看看事件查看器
-
我已经将它设置为本地系统,所以问题不在于那里。
标签: c# web-services wcf windows-services