我正在开发一个托管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并开始监听数据库。当我在debugmode中启动它时,这完全正常,但是当我在发布中运行它时,服务被托管,但代码不会执行。
我到处寻找相同类型的答案或问题,但我什么也没想出来。因此,如果每个人都遇到同一类型的问题,请告诉你如何解决它。
亲切的问候
答案 0 :(得分:1)
问题不在于我的代码,而是运行服务时的权限
该服务是作为本地系统帐户启动的,但它没有运行服务/执行代码的权限。
要更改运行服务的帐户: