现象为程序的调度任务内的异步方法不能正常打印日志,同步方法正常,自测用写死路径的打印方法正常,framework 4.5。
先说原因:
多线程下HttpContext.Current会丢失。
问题出在以下位置:
try
{
sFileDir = HttpContext.Current.Request.PhysicalApplicationPath;
}
catch
{
FileDir = Environment.CurrentDirectory;
}
int n = sFileDir.IndexOf("某特定字符串l");
sFileDir = sFileDir.Substring(0, n) + "某特定字符串l\\JTZJ\\" + TxtFileName;
HttpContext.Current.Request.PhysicalApplicationPath 同步为程序路径,异步时走到这里未实例化
Environment.CurrentDirectory 都为 c:\windows\system32\inetsrv
具体原因猜测调度服务是单独起的IIS,应用程序调用接口触发,同步时可以获取到HttpContext.Current,异步程序丢失,在IIS路径下没有找到特定字符串,认为为非法路径。
解决方法,在异步程序中 HttpContext.Current接一下主线程的.Current后正常。