Pergunta

Eu tenho um cenário onde os usuários de minha aplicação web ASP.NET enviar depoimentos que consistem em informações de texto e imagens. O processo de enviar possui as seguintes etapas:

  • Primeiro o usuário entradas do conteúdo e escolhe um caminho para uma imagem
  • Quando ele clica pré-visualização, a informação é mais uma vez mostrado para que ele possa confirmar
  • Uma vez confirmada a informação é mantido no banco de dados

O problema com isso é que eu não quero para armazenar imagens carregadas no DB antes que o usuário realmente confirma. Em vez disso eu armazená-los como arquivos temporários e colocá-los em DB somente após a confirmação final.

Desde que eu também quero meu aplicativo para ser executado em meio confiança, tenho permissões de gravação única para o diretório do aplicativo e em nenhum lugar fora. Eu ainda quero permissões limite de gravação para o utilizador do serviço ASPNET / rede para a pasta ~ / App_Data. O problema com o meu cenário é que uma vez que um arquivo temporário é criado nessa pasta, o pool de aplicativos é reciclado e eu não quero que em cada depoimento enviar.

Como você aconselhar I manter estes arquivos temporários em vez disso? A piscina não é reiniciado se eu atualizar um arquivo - apenas em criar ou renomear. Mas eu não acho que pode armazenar imagens inteiras em um único arquivo para todos os usuários. O que você acha?

Atualizar : Devo observar que eu estou usando um controle de terceiros para upload. Isso me dá acesso programático ao fluxo binário do conteúdo do arquivo após o upload, mas não posso manter isso depois de um segundo postback (o primeiro passo e postback realmente faz o upload).

Foi útil?

Solução

Eu recomendaria IsolatedStorage . É uma espécie de pasta virtual.

Aqui está um trecho de um exemplo em 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();

Atualizar : Para limpar o seu arquivo simplesmente fazer isso:

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;
    }
}

Outras dicas

O arquivo web_mediumtrust.config padrão que vem da Microsoft é notoriamente impraticável.

Aqui está um trecho do arquivo web_mediumtrust.config padrão. Por padrão, você não pode usar System.IO para descobrir ou gravação para a pasta Temp.

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

Embora eu não tenha experirement com armazenamento isolado como mencionado por @Seb, parece ser permitido pelo arquivo de configuração padrão.

Você ainda pode usar o Path.GetTempFileName () para obter um arquivo temporário em cenários ASP.NET.

Deve dar-lhe um caminho de arquivo temporário que é gravável por NETWORK_SERVICE mas também vive em uma das pastas temporárias do Windows real, e não a pasta do aplicativo.

Se o seu host configurado seu servidor corretamente, que deve funciona bem.

Esta é uma resposta a leppie que comentou sobre a minha pergunta (para evitar o limite de caracteres)

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

... às vezes o seu pool de aplicativos recicla inexplicavelmente sem nenhum motivo aparente. Isso geralmente é um problema de configuração ou devido ao fato de que você está executando operações do sistema de arquivos no diretório do aplicativo.

Você tem certeza que não é suposto para reciclar?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top