Tipos de isolamento

O acesso ao armazenamento isolado é sempre restrito ao usuário que o criou. Para implementar esse tipo de isolamento, o common language runtime usa a mesma noção de identidade de usuário que o sistema operacional reconhece, que é a identidade associada ao processo no qual o código está em execução quando o armazenamento é aberto. Essa é uma identidade de usuário autenticado, mas a representação pode fazer com que a identidade do usuário atual seja alterada dinamicamente.

O acesso ao armazenamento isolado também é restrito de acordo com a identidade associada ao domínio do aplicativo e ao assembly ou apenas ao assembly. O runtime obtém essas identidades das seguintes maneiras:

  • A identidade de domínio representa a evidência do aplicativo, que, no caso de um aplicativo Web, pode ser a URL completa. Para código hospedado pelo shell, a identidade de domínio pode ser baseada no caminho de diretório de aplicativo. Por exemplo, se o executável é executado do caminho C:\Office\MyApp.exe, a identidade de domínio é C:\Office\MyApp.exe.

  • A identidade do assembly é a evidência do assembly. Pode vir de uma assinatura digital de criptografia, que pode ser o nome forte do assembly, o editor de software do assembly ou sua identidade de URL. Se um assembly tiver um nome forte e uma identidade do editor de software, a identidade do editor de software será usada. Se o assembly vier da Internet e não estiver assinado, a identidade de URL será usada. Para saber mais sobre assemblies e nomes fortes, confira Programação com assemblies.

  • Os armazenamentos móveis migram com um usuário que tem um perfil de usuário móvel. Os arquivos são gravados em um diretório de rede e são baixados em qualquer computador em que o usuário faz logon. Para saber mais sobre perfis de usuário móvel, confira IsolatedStorageScope.Roaming.

Combinando os conceitos de usuário, domínio e identidade de assembly, o armazenamento isolado pode isolar dados das seguintes maneiras, cada uma das quais tem seus próprios cenários de uso:

Um desses isolamentos pode ser combinado a um perfil de usuário móvel. Para saber mais, confira a seção Armazenamento isolado e roaming.

A seguinte ilustração demonstra como os repositórios são isolados em escopos diferentes:

Diagram that shows isolation by user and assembly.

Observe que, exceto para armazenamentos móveis, o armazenamento isolado é sempre implicitamente isolado por computador, pois usa os recursos de armazenamento locais para um determinado computador.

Importante

O armazenamento isolado não está disponível para aplicativos da Store do Windows 8.x. Em vez disso, use as classes de dados de aplicativos nos namespaces Windows.Storage incluídos na API do Windows Runtime para armazenar dados e arquivos locais. Para saber mais, confira Dados de aplicativo no Centro de Desenvolvimento do Windows.

Isolamento por usuário e assembly

Quando o assembly que usa o repositório de dados precisa ser acessível de qualquer domínio de aplicativo, o isolamento por usuário e assembly é apropriado. Normalmente, nessa situação, o armazenamento isolado é usado para armazenar dados que se aplicam a vários aplicativos e não estão vinculados a um aplicativo específico, como o nome do usuário ou informações de licença. Para acessar o armazenamento isolado por usuário e assembly, o código deve ser confiável para transferir informações entre aplicativos. Normalmente, o isolamento pelo usuário e assembly é permitido em intranets, mas não na Internet. Chamar o método estático IsolatedStorageFile.GetStore e passar um usuário e um assembly IsolatedStorageScope retorna um armazenamento com esse tipo de isolamento.

O exemplo de código a seguir recupera um armazenamento que é isolado por usuário e assembly. O repositório pode ser acessado por meio do objeto 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)

Para obter um exemplo que usa os parâmetros de evidência, confira GetStore(IsolatedStorageScope, Evidence, Type, Evidence, Type).

O método GetUserStoreForAssembly está disponível como um atalho, conforme mostrado no exemplo de código a seguir. Este atalho não pode ser usado para abrir repositórios compatíveis com roaming. Use GetStore nesses casos.

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

Isolamento por usuário, domínio e assembly

Se o aplicativo usa um assembly de terceiros que exige um armazenamento de dados privados, você pode usar o armazenamento isolado para armazenar os dados privados. O isolamento por usuário, domínio e assembly garante que somente o código em determinado assembly possa acessar os dados e somente quando o assembly for usado pelo aplicativo que estava em execução quando o assembly criou o repositório e somente quando o usuário para quem o armazenamento foi criado executar o aplicativo. O isolamento por usuário, domínio e assembly impede que o assembly de terceiros vaze dados para outros aplicativos. Esse tipo de isolamento deverá ser a opção padrão, se você souber que deseja usar o armazenamento isolado e não tiver certeza de qual tipo de isolamento usar. Chamar o método estático GetStore de IsolatedStorageFile e passar um usuário, domínio e assembly IsolatedStorageScope retorna um armazenamento com esse tipo de isolamento.

O exemplo de código a seguir recupera um armazenamento isolado por usuário, domínio e assembly. O repositório pode ser acessado por meio do objeto 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)

Outro método está disponível como um atalho, conforme mostrado no exemplo de código a seguir. Este atalho não pode ser usado para abrir repositórios compatíveis com roaming. Use GetStore nesses casos.

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

Armazenamento isolado e roaming

Os perfis de usuário móvel são um recurso do Windows que permite que um usuário configure uma identidade em uma rede e use essa identidade para fazer logon em qualquer computador da rede, mantendo todas as configurações personalizadas. Um assembly que usa o armazenamento isolado pode especificar que o armazenamento isolado do usuário deve migrar com o perfil de usuário móvel. O roaming pode ser usado em conjunto com o isolamento por usuário e assembly ou com o isolamento por usuário, domínio e assembly. Se um escopo móvel não for usado, os repositórios não entrarão em roaming, mesmo que um perfil de usuário móvel seja usado.

O exemplo de código a seguir recupera um armazenamento móvel isolado por usuário e assembly. O repositório pode ser acessado por meio do objeto 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)

Um escopo de domínio pode ser adicionado para criar um armazenamento móvel isolado por usuário, domínio e aplicativo. O código de exemplo a seguir demonstra isso.

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)

Confira também