【发布时间】:2013-08-29 11:34:39
【问题描述】:
所以我有一个 Windows 服务作为本地系统运行。
此 Windows 服务然后启动 WCF 服务。
在我的机器上没有问题并且工作正常。
从测试控制台应用程序,在目标机器上,它工作正常
从 Windows 服务,在目标机器上,它不起作用。也不会抛出异常...
我真的坚持这一点。 :(
这可能是权限吗?
m_tknCancelToken = new CancellationTokenSource();
/**************************************************************************************/
/*** Create and start the task ***/
/**************************************************************************************/
m_tskService = Task.Factory.StartNew((object o) =>
{
RunService();
},
m_tknCancelToken);
/**************************************************************************************/
/*** Set the handler when the task is cancelled or faulted ***/
/**************************************************************************************/
m_tskService.ContinueWith(
TaskEndedHandler,
TaskContinuationOptions.OnlyOnFaulted);
m_tskService.ContinueWith(
TaskEndedHandler,
TaskContinuationOptions.OnlyOnCanceled);
然后捕捉错误。
private void TaskEndedHandler(Task tskTask)
{
Log.Log(String.Format("{0} has ended", ServiceName), "WHS010CI");
if (tskTask.Exception != null)
{
Log.LogEx(tskTask.Exception, "WHS0103E");
if (tskTask.Exception.InnerExceptions != null)
{
foreach (Exception ex in tskTask.Exception.InnerExceptions)
{
Log.LogEx(ex, "WHS0104E");
}
}
}
if(tskTask.IsCanceled)
{
Log.Log(String.Format("[{0}] has been cancelled", ServiceName), "WHS0104W");
}
}
【问题讨论】:
-
你确定你没有吞下异常?你记录了所有的
catch块吗?检查catch语句的托管代码。如果它的权限,你会得到一个例外。我会先添加日志记录并勾选功能块,然后通过逐行跟踪日志确定它。或者如果可以的话,附加调试器。 -
不幸的是,我无法附加安装在远程机器上的调试器,而我没有权限...确切地...我将放置一些我认为如何捕获异常的代码。但感谢您的建议
标签: c# wcf windows-services self-hosting