我有一个使用Forms Authentication模式的.Net应用程序,它有一个调用异步任务的函数。以下是该任务的片段:线程任务不在IIS中执行
Task.Factory.StartNew(() => { UploadFunction(); }, tokenSource.Token, TaskCreationOptions.LongRunning,TaskScheduler.Default);
当我在Visual Studio IDE上进行测试时,线程正常工作。问题是当我部署它时,线程任务似乎被跳过或不被系统执行。
我读过的物品,这可以通过权限IIS引起:
http://codemine.net/post/Thread-Not-working-in-Aspnet-When-deployed-to-IIS
调整在表单认证被实现上述文章的溶液,以下是用于该代码:
[System.Runtime.InteropServices.DllImport("advapi32.dll", EntryPoint = "LogonUser")]
private static extern bool LogonUser(
string lpszUsername,
string lpszDomain,
string lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
public JsonResult uploadimages(){
try{
IntPtr token = new IntPtr(0);
token = IntPtr.Zero;
bool returnValue = LogonUser("Administrator", "WIN-82CH4949B3Q", "Neuron14",
3,
0,
ref token);
WindowsIdentity newId = new WindowsIdentity(token);
WindowsImpersonationContext impersonatedUser = newId.Impersonate();
var task2 = Task.Factory.StartNew(() => { UploadFunction(); }, tokenSource.Token, TaskCreationOptions.LongRunning,TaskScheduler.Default);
impersonatedUser.Undo();
return Json(new { message = "Success" }, "text/plain; charset=utf-8");
}
catch (ex Exception)
{
return Json(new { error= ex.Message }, "text/plain; charset=utf-8");
}
}
实现上面的代码到系统仍然不执行一次部署在IIS中的线程。我真的很难解决这个问题,因为我不知道为什么线程在部署时没有执行。
为什么不能呢?将所有必要的数据传递给该函数。此外,该任务不被“跳过”。确保您收到所有错误的通知。由于错误消失,“忘却遗忘”在生产中不可行。 – usr 2014-09-23 08:38:39
所以上面的实现是一个难忘的?所有必要的数据都通过了。我不确定错误陷阱。我怎样才能确保代码通知系统所有的错误? – user3579974 2014-09-23 09:21:12
未观察到任务的结果是在我的书中发生火灾并忘记了。确保UploadFunction具有try-catch-all并为每个错误发送邮件。链接的帖子是关于在请求线程中提取数据并将其传递给工作线程/任务。那篇文章对你的情况有什么意义?似乎你可以使用相同的方法。 – usr 2014-09-23 09:36:09