2009-11-10 4 views
1

App_Data 디렉토리에 파일을 저장하고 디렉토리를 만들 수있는 작은 asp.net MVC 1 웹 앱이 있습니다. 쓰기 작업이 성공하면 tempdata에 메시지를 추가하고 redirectToRoute를 수행합니다. 문제는 작업이 실행될 때 tempdata가 null이라는 것입니다. 웹 응용 프로그램 루트 디렉토리 외부의 디렉토리에 파일을 쓰면 tempdata가 null이 아니며 모든 것이 올바르게 작동합니다. app_data에서 글쓰기가 tempdata를 지우는 이유는 무엇입니까?App_Data에 파일을 쓰면 tempdata가 null이됩니다.

편집 :DRS.Logic.Repository.Manager.CreateFile (경로, hpf, 주석)이 App_Data에 기록하면 TempData는 리디렉션되는 작업에서 null이됩니다. 그것이 웹 응용 프로그램 루트 밖으로 디렉토리라면 괜찮습니다. 예외는 발생하지 않습니다.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(int id, string path, FormCollection form) 
{ 
    ViewData["path"] = path; 
    ViewData["id"] = id; 

    HttpPostedFileBase hpf; 

    string comment = form["FileComment"]; 
    hpf = Request.Files["File"] as HttpPostedFileBase; 

    if (hpf.ContentLength != 0) 
    { 
     DRS.Logic.Repository.Manager.CreateFile(path, hpf, comment); 
     TempData["notification"] = "file was created"; 
     return RedirectToRoute(new { controller = "File", action ="ViewDetails", id = id, path = path + Path.GetFileName(hpf.FileName) }); 
    } 
    else 
    { 
     TempData["notification"] = "No file were selected."; 
     return View(); 
    } 
} 
+0

코드를 게시하십시오. 다른 디렉토리에 글을 쓸 때 여전히 RedirectToRoute를 사용하고 있습니까? – Lazarus

+0

예 아직 redirecttoroute를 사용하고 있습니다. 실제 파일을 작성하는 코드는 간단하며 예외는 발생하지 않습니다. 동일한 결과를 사용하여 redirectToAction을 시도했습니다. – RAMX

답변

1

tempdata를 null로 만드는 원인을 파악했습니다. DRS.Logic.Repository.Manager.CreateFile (path, hpf, comment); ~/App_Data/아래에 임시 디렉토리를 만들고 해당 디렉토리에 파일을 작성하고 해당 파일을 저장소에 커밋 한 다음 임시 디렉토리를 정리합니다. App_Data 내의 특정 io 작업이 파일 시스템 모니터를 트리거하고 웹 응용 프로그램이 다시 시작된 것 같습니다. 응용 프로그램이 다시 시작될 때 inproc 세션을 사용 중이었기 때문에 세션이 지워졌습니다. Tempdata는 실제로 세션에 저장되므로 삭제됩니다. 해결책 : inproc 세션을 사용하거나 웹 응용 프로그램의 루트 디렉토리 외부에 파일을 저장하지 마십시오. App_data의 변경으로 인해 응용 프로그램이 다시 시작되었다는 것을 알지 못했습니다.

+1

허. app_data에 쓰면 응용 프로그램이 다시 시작됩니다. 특정 IO 작업이란 무엇입니까? ASP.Net이 실제로보고 한 내용을 보는 것은 흥미로울 것입니다. http://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx – a7drew

+2

다시 시작하는 IO 작업은 폴더를 삭제하는 것 같습니다 . 같은 시나리오로 – jhexp

+0

이 처리되었습니다. 하지만 내 사건은 bin 폴더에 내가 폴더를 작성하고 내부 파일을 작성하려고하지만 그것은 항상 null이 될 동시 사전의 원인 –

관련 문제