문제

내 ASP.NET 웹 응용 프로그램 사용자가 텍스트 정보와 이미지로 구성된 평가를 제출하는 시나리오가 있습니다.제출 프로세스는 다음 단계로 구성됩니다.

  • 먼저 사용자가 콘텐츠를 입력하고 이미지 경로를 선택합니다.
  • 미리보기를 클릭하면 확인할 수 있도록 정보가 다시 한 번 표시됩니다.
  • 확인되면 정보가 데이터베이스에 유지됩니다.

문제는 사용자가 실제로 확인하기 전에 업로드된 이미지를 DB에 저장하고 싶지 않다는 것입니다.대신 임시 파일로 저장하고 최종 확인 후에 DB에 넣습니다.

또한 내 응용 프로그램이 중간 신뢰로 실행되기를 원하기 때문에 응용 프로그램 디렉터리에만 쓰기 권한이 있고 외부에는 쓰기 권한이 없습니다.ASPNET/NETWORK SERVICE 사용자의 쓰기 권한을 ~/App_Data 폴더로 제한하고 싶습니다.내 시나리오의 문제는 일단 이 폴더에 임시 파일이 생성되면 응용 프로그램 풀이 재활용되고 모든 평가 제출에서 이를 원하지 않는다는 것입니다.

대신 이러한 임시 파일을 보관하도록 조언하는 방법은 무엇입니까?파일을 업데이트하면 풀이 다시 시작되지 않습니다. 생성 또는 이름 변경 시에만 가능합니다.하지만 모든 사용자를 위해 전체 이미지를 단일 파일에 저장할 수는 없을 것 같습니다.어떻게 생각하나요?

업데이트:업로드를 위해 타사 컨트롤을 사용하고 있다는 점에 유의해야 합니다.업로드 후 파일 콘텐츠의 바이너리 스트림에 프로그래밍 방식으로 액세스할 수 있지만 두 번째 포스트백 후에는 이를 유지할 수 없습니다(첫 번째 단계와 포스트백이 실제로 업로드를 수행함).

도움이 되었습니까?

해결책

나는 추천하고 싶다 격리된 스토리지.일종의 가상 폴더입니다.

다음은 에서 발췌한 내용입니다. CodeProject의 예:

IsolatedStorageFileStream stream = 
  new IsolatedStorageFileStream(ISOLATED_FILE_NAME, 
  FileMode.Create, isoStore);

StreamWriter writer = new StreamWriter( stream );
writer.WriteLine( "This is my first line in the isolated storage file." );
writer.WriteLine( "This is second line." );
writer.Close();

업데이트:파일을 정리하려면 다음을 수행하십시오.

string fileName = "isolatestorage.txt";

IsolatedStorageFile storage = IsolatedStorageFile.GetStore(
    IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

string[] files = storage.GetFileNames(fileName);
foreach(string file in files) {
    if(file == fileName) {
        storage.DeleteFile(file);
        break;
    }
}

다른 팁

Microsoft가 제공하는 기본 web_mediumtrust.config 파일은 매우 비실용적입니다.

다음은 기본 web_mediumtrust.config 파일의 일부입니다.기본적으로 System.IO를 사용하여 임시 폴더를 검색하거나 쓸 수 없습니다.

                        <IPermission
                                class="FileIOPermission"
                                version="1"
                                Read="$AppDir$"
                                Write="$AppDir$"
                                Append="$AppDir$"
                                PathDiscovery="$AppDir$"
                        />

@Seb에서 언급한 것처럼 격리 저장소를 사용해 본 적은 없지만 기본 구성 파일에서 허용되는 것 같습니다.

계속해서 일반으로 사용하실 수 있습니다 경로.GetTemp파일 이름() ASP.NET 시나리오에서 임시 파일을 가져오는 메서드입니다.

NETWORK_SERVICE에서 쓸 수 있지만 응용 프로그램 폴더가 아닌 실제 Windows 임시 폴더 중 하나에 있는 임시 파일 경로를 제공해야 합니다.

호스트가 서버를 올바르게 구성했다면 제대로 작동할 것입니다.

이것은 내 질문에 댓글을 달았던 Leppie의 답변입니다(글자 제한을 피하기 위해).

에서: http://blogs.msdn.com/johan/archive/2007/05/16/common-reasons-why-your-application-pool-may-unexpectedly-recycle.aspx

...때로는 뚜렷한 이유 없이 애플리케이션 풀이 이유 없이 재활용되는 경우가 있습니다.이는 일반적으로 구성 문제이거나 응용 프로그램 디렉터리에서 파일 시스템 작업을 수행하고 있기 때문에 발생합니다.

재활용하면 안되는 거 확실해요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top