Tipi di isolamento

L'accesso allo spazio di memorizzazione isolato è sempre limitato all'utente che l'ha creata. Per implementare questo tipo di isolamento, Common Language Runtime usa la stessa nozione di identità utente riconosciuta dal sistema operativo, ovvero l'identità associata al processo in cui è in esecuzione il codice quando viene aperto lo spazio di memorizzazione. Sebbene sia un'identità utente autenticata, è possibile che con la rappresentazione l'identità dell'utente corrente venga modificata dinamicamente.

L'accesso allo spazio di memorizzazione isolato viene limitato anche in base all'identità associata all'assembly e al dominio dell'applicazione oppure solo all'assembly. Il runtime ottiene queste identità nei modi seguenti:

  • L'identità del dominio rappresenta l'evidenza dell'applicazione, che nel caso di un'applicazione Web può coincidere con l'URL completo. Per il codice su shell, l'identità del dominio può essere basata sul percorso di directory dell'applicazione. Se ad esempio il file eseguibile viene eseguito dal percorso C:\Office\MyApp.exe, l'identità del dominio sarà C:\Office\MyApp.exe.

  • L'identità dell'assembly è l'evidenza dell'assembly. Può derivare da una firma digitale crittografica, che può corrispondere al nome sicuro dell'assembly, all'editore dell'assembly oppure all'identità del relativo URL. Se un assembly dispone sia di un'identità fornita dal nome sicuro sia di un'identità fornita dall'editore, verrà usata quella fornita dall'editore. Se l'assembly proviene da Internet e non è firmato, verrà usata invece l'identità dell'URL. Per altre informazioni sugli assembly e sui nomi sicuri, vedere Programmazione con gli assembly.

  • Gli spazi di memorizzazione roaming si spostano con gli utenti che dispongono di un profilo di utente roaming. I file vengono scritti in una directory di rete e scaricati su qualsiasi computer a cui l'utente accede. Per altre informazioni sui profili di utente roaming, vedere IsolatedStorageScope.Roaming.

Combinando i concetti di identità di utente, dominio e assembly, lo spazio di memorizzazione isolato può isolare i dati nei modi seguenti, ciascuno dei quali presenta specifici scenari di utilizzo:

Ognuno di questi isolamenti può essere combinato con un profilo di utente roaming. Per altre informazioni, vedere la sezione Spazio di memorizzazione isolato e roaming.

La figura seguente illustra come vengono isolati gli archivi in ambiti diversi:

Diagram that shows isolation by user and assembly.

Fatta eccezione per gli archivi roaming, lo spazio di memorizzazione isolato viene sempre isolato in modo implicito in base al computer perché usa le funzioni di archiviazione locali di un determinato computer.

Importante

Lo spazio di memorizzazione isolato non è disponibile per le app di Windows 8.x Store. Al contrario, usare le classi di dati dell'applicazione negli spazi dei nomi Windows.Storage inclusi nell'API di Windows Runtime per archiviare dati e file locali. Per altre informazioni, vedere Dati dell'applicazione nel Centro per sviluppatori Windows.

Isolamento in base all'utente e all'assembly

L'isolamento in base all'utente e all'assembly è indicato quando si vuole che l'assembly che usa l'archivio dati sia accessibile da qualsiasi dominio dell'applicazione. In genere, in questa situazione, lo spazio di memorizzazione isolato viene usato per memorizzare dati che riguardano più applicazioni e non una singola applicazione, come il nome utente e informazioni sulla licenza. Per poter accedere a uno spazio di memorizzazione isolato in base all'utente e all'assembly, è necessario che il codice sia considerato attendibile per il trasferimento di informazioni tra applicazioni diverse. In genere, l'isolamento in base all'utente e all'assembly è consentito in reti Intranet, ma non in Internet. Chiamando il metodo statico IsolatedStorageFile.GetStore e passando un utente e un assembly IsolatedStorageScope, viene restituito uno spazio di memorizzazione con questo tipo di isolamento.

L'esempio di codice seguente recupera uno spazio di memorizzazione isolato in base all'utente e all'assembly. È possibile accedere allo spazio di memorizzazione tramite l'oggetto isoFile.

IsolatedStorageFile^ isoFile =
    IsolatedStorageFile::GetStore(IsolatedStorageScope::User |
        IsolatedStorageScope::Assembly, (Type^)nullptr, (Type^)nullptr);
IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
    IsolatedStorageScope.Assembly, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Assembly, Nothing, Nothing)

Per un esempio in cui vengono usati i parametri di evidenza, vedere GetStore(IsolatedStorageScope, Evidence, Type, Evidence, Type).

Come alternativa è disponibile il metodo GetUserStoreForAssembly, come illustrato nell'esempio di codice seguente. Questa alternativa, tuttavia, non può essere usata per aprire spazi di memorizzazione in cui può essere abilitato il roaming. In questi casi, usare GetStore.

IsolatedStorageFile^ isoFile = IsolatedStorageFile::GetUserStoreForAssembly();
IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForAssembly();
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetUserStoreForAssembly()

Isolamento in base all'utente, al dominio e all'assembly

Se un'applicazione usa un assembly di terze parti che richiede un archivio dati privato, è possibile usare lo spazio di memorizzazione isolato per memorizzare i dati privati. L'isolamento in base all'utente, al dominio e all'assembly garantisce che ai dati possa accedere solo il codice di un determinato assembly, solo quando l'assembly viene usato dall'applicazione che era in esecuzione nel momento in cui l'assembly ha creato lo spazio di memorizzazione e solo quando l'applicazione viene eseguita dall'utente per il quale è stato creato lo spazio di memorizzazione. L'isolamento in base all'utente, al dominio e all'assembly impedisce che l'assembly di terze parti passi i dati ad altre applicazioni. È opportuno scegliere questo tipo di isolamento se si è certi di voler usare lo spazio di memorizzazione isolato, ma non si è sicuri del tipo di isolamento da usare. Chiamando il metodo statico GetStore di IsolatedStorageFile e passando un utente, un dominio e un assembly, IsolatedStorageScope restituisce lo spazio di memorizzazione con questo tipo di isolamento.

Nell'esempio di codice seguente viene recuperato uno spazio di memorizzazione isolato in base all'utente, al dominio e all'assembly. È possibile accedere allo spazio di memorizzazione tramite l'oggetto isoFile.

IsolatedStorageFile^ isoFile =
    IsolatedStorageFile::GetStore(IsolatedStorageScope::User |
        IsolatedStorageScope::Domain |
        IsolatedStorageScope::Assembly, (Type^)nullptr, (Type^)nullptr);
IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
        IsolatedStorageScope.Domain |
        IsolatedStorageScope.Assembly, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Domain Or _
        IsolatedStorageScope.Assembly, Nothing, Nothing)

Come alternativa è disponibile un altro metodo, come illustrato nell'esempio di codice seguente. Questa alternativa, tuttavia, non può essere usata per aprire spazi di memorizzazione in cui può essere abilitato il roaming. In questi casi, usare GetStore.

IsolatedStorageFile^ isoFile = IsolatedStorageFile::GetUserStoreForDomain();
IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForDomain();
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetUserStoreForDomain()

Spazio di memorizzazione isolato e roaming

I profili utente mobili sono una funzionalità di Windows che consente a un utente di impostare un'identità in una rete e usarla per accedere a qualsiasi computer di rete, conservando tutte le impostazioni personalizzate. Un assembly che usa lo spazio di memorizzazione isolato può specificare che lo spazio di memorizzazione isolato dell'utente si sposti con il profilo utente mobile. Il roaming può essere usato con l'isolamento in base all'utente e all'assembly oppure con l'isolamento in base all'utente, al dominio e all'assembly. Se non viene usato un ambito di roaming, gli spazi di memorizzazione non si spostano neppure se viene usato un profilo utente mobile.

Nell'esempio di codice seguente viene recuperato uno spazio di memorizzazione di roaming isolato in base all'utente e all'assembly. È possibile accedere allo spazio di memorizzazione tramite l'oggetto isoFile.

IsolatedStorageFile^ isoFile =
    IsolatedStorageFile::GetStore(IsolatedStorageScope::User |
        IsolatedStorageScope::Assembly |
        IsolatedStorageScope::Roaming, (Type^)nullptr, (Type^)nullptr);
IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
        IsolatedStorageScope.Assembly |
        IsolatedStorageScope.Roaming, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Assembly Or _
        IsolatedStorageScope.Roaming, Nothing, Nothing)

È possibile aggiungere un ambito di dominio per creare uno spazio di memorizzazione di roaming isolato in base all'utente, al dominio e all'applicazione. Nell'esempio di codice seguente viene illustrata questa possibilità.

IsolatedStorageFile^ isoFile =
    IsolatedStorageFile::GetStore(IsolatedStorageScope::User |
        IsolatedStorageScope::Assembly | IsolatedStorageScope::Domain |
        IsolatedStorageScope::Roaming, (Type^)nullptr, (Type^)nullptr);
IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
        IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain |
        IsolatedStorageScope.Roaming, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain Or _
        IsolatedStorageScope.Roaming, Nothing, Nothing)

Vedi anche