我有一個使用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