Доступ к локальным и удаленным данным в приложениях ClickOnce

Большинство приложений потребляют или производят данные. ClickOnce предоставляет различные варианты чтения и записи данных как локально, так и удаленно.

Локальные данные

С помощью ClickOnce можно загружать и хранить данные локально с помощью любого из следующих методов:

  • Каталог данных ClickOnce

  • Изолированное хранилище

  • Другие локальные файлы

Каталог данных ClickOnce

Каждое приложение ClickOnce, установленное на локальном компьютере, содержит каталог данных, хранящийся в папке "Документы пользователя" и Параметры. Любой файл, включенный в приложение ClickOnce и помеченный как файл data, копируется в этот каталог при установке приложения. Файлы данных могут представлять собой данные любого типа. Чаще всего используются текстовые файлы, файлы XML и файлы базы данных, например MDB-файлы Microsoft Access.

Каталог данных предназначен для управляемых приложением данных, то есть данных, которые приложение явно сохраняет и обслуживает. Все статические, независимые файлы, которые не помечены как «данные» в манифесте приложения, помещаются в каталог приложения. В этом же каталоге находятся исполняемые файлы приложения (.exe) и сборки.

Примечание.

При удалении приложения ClickOnce его каталог данных также удаляется. Никогда не используйте каталог данных для хранения управляемых конечным пользователем данных, например документов.

Пометка файлов данных в дистрибутиве ClickOnce

Чтобы поместить существующий файл в каталог данных, необходимо пометить существующий файл как файл данных в файле манифеста приложения ClickOnce. Дополнительные сведения см. в разделе Практическое руководство. Включение файла данных в приложение ClickOnce.

Чтение и запись в каталог данных

Для чтения из каталога данных требуется разрешение на чтение приложения ClickOnce; Аналогичным образом, для записи в каталог требуется разрешение на запись. Ваше приложение получит это разрешение автоматически, если оно настроено для работы с полным доверием. Дополнительные сведения о повышении разрешений для приложения с помощью повышения прав разрешений или доверенного развертывания приложений см. в разделе "Безопасные приложения ClickOnce".

Примечание.

Если в организации не используется развертывание надежных приложений и отключено повышение уровня разрешений, подтверждение разрешений завершится ошибкой.

Получив эти разрешения, ваше приложение сможет осуществлять доступ в каталог данных, используя вызовы метода в классах типа System.IO. Путь к каталогу данных можно получить в приложении ClickOnce Windows Forms с помощью DataDirectory свойства, определенного CurrentDeploymentApplicationDeploymentдля свойства. Это самый удобный и рекомендуемый способ доступа к данным. В следующем примере кода показано, как сделать это для текстового файла CSV.txt, включенного вами в развертывание в качестве файла данных.

Примечание.

Класс ApplicationDeployment и API в System.Deployment.Application пространстве имен не поддерживаются в .NET Core и .NET 5 и более поздних версиях. В .NET 7 поддерживается новый метод доступа к свойствам развертывания приложения. Дополнительные сведения см. в разделе "Свойства развертывания Access ClickOnce" в .NET. .NET 7 не поддерживает эквивалент методов ApplicationDeployment.

if (ApplicationDeployment.IsNetworkDeployed)
{
    try
    {
        using (StreamReader sr = new StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory + @"\CSV.txt"))
        {
            MessageBox.Show(sr.ReadToEnd());
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Could not read file. Error message: " + ex.Message);
    }
}

Дополнительные сведения о маркировке файлов в развертывании как файлов данных см. в разделе How to: Include a Data File in a ClickOnce Application.

Можно также получить путь к каталогу данных, используя соответствующие переменные в классе Application , например LocalUserAppDataPath.

Для выполнения операций с другими типами файлов могут потребоваться дополнительные разрешения. Например, если вы хотите использовать файл базы данных Access (.mdb), приложение должно подтвердить полное доверие, чтобы использовать соответствующие <классы xref:System.Data> .

Каталог данных и версии приложения

Каждая версия приложения имеет свой собственный каталог данных, который изолирован от других версий. ClickOnce создает этот каталог независимо от того, включены ли файлы данных в развертывание, чтобы приложение было расположено для создания новых файлов данных во время выполнения. При установке новой версии приложения ClickOnce копирует все существующие файлы данных из каталога данных предыдущей версии в каталог данных новой версии, независимо от того, были ли они включены в исходное развертывание или созданы приложением.

ClickOnce заменит старую версию файла более новой версией сервера, если файл данных имеет другое хэш-значение в старой версии приложения, как и в новой версии. Кроме того, если более ранняя версия приложения создала новый файл с тем же именем, что и файл, включенный в развертывание новой версии, ClickOnce перезапишет файл старой версии новым файлом. В обоих случаях старые файлы будут включены в подкаталог внутри каталога данных с именем .pre, так что приложение по-прежнему будет иметь доступ к старым данным в целях миграции.

Если требуется более детальное перемещение данных, можно использовать API развертывания ClickOnce для выполнения пользовательской миграции из старого каталога данных в новый каталог данных. Необходимо будет проверить наличие доступной загрузки, воспользовавшись свойством IsFirstRun, загрузить обновление с использованием Update или UpdateAsync, а затем самостоятельно выполнить действия по пользовательской миграции данных по окончании обновления.

Изолированное хранилище

Изолированное хранилище предоставляет API для создания файлов с использованием простого API и осуществления доступа к ним. Фактическое расположение хранимых файлов скрыто от разработчика и пользователя.

Изолированные служба хранилища работают во всех версиях платформа .NET Framework. Изолированное хранилище также работает в приложениях с частичным доверием, предоставлять дополнительные разрешения не требуется. Изолированное хранилище следует использовать, если приложение должно выполняться с частичным доверием, но при этом обслуживать данные приложения.

Для получения дополнительной информации см. Изолированное хранилище.

Другие локальные файлы

Если приложение должно работать с данными конечных пользователей или сохранять такие данные (отчеты, изображения, музыку и т. д.), приложению потребуется разрешение FileIOPermission для чтения и записи данных в локальной файловой системе.

Удаленные данные

На некотором этапе приложению, скорее всего, необходимо будет извлечь сведения с удаленного веб-сайта, например клиентские данные или информацию о рынке. В этом разделе рассматриваются наиболее распространенные методы получения удаленных данных.

Доступ к файлам с помощью HTTP

Доступ к данным на веб-сервере можно осуществлять с использованием класса WebClient или HttpWebRequest в пространстве имен System.Net . Эти данные могут быть статическими файлами или ASP.NET приложениями, возвращающими необработанный текст или XML-данные. Если формат данных отличается от XML, самым быстрым способом извлечения данных будет использование класса XmlDocument , метод Load которого принимает URL-адрес в качестве аргумента. Пример см. в разделе "Чтение XML-документа" в DOM.

Необходимо помнить о соображениях безопасности, когда приложение осуществляет доступ к удаленным данным через HTTP. По умолчанию доступ приложения ClickOnce к сетевым ресурсам может быть ограничен в зависимости от способа развертывания приложения. Эти ограничения применяются, чтобы не допустить доступа вредоносных программ к привилегированным удаленным данным или использования компьютера пользователя для атаки на другие компьютеры в сети.

В следующей таблице перечислены стратегии развертывания, которые можно использовать, и их разрешения в Интернете по умолчанию.

Тип развертывания Сетевые разрешения по умолчанию
Веб-установка Имеется доступ только к веб-серверу, с которого было установлено приложение
Установка общей папки Отсутствует доступ к веб-серверам
Установка с компакт-диска Доступны любые веб-серверы

Если приложение ClickOnce не может получить доступ к веб-серверу из-за ограничений безопасности, приложение должно утверждать WebPermission для этого веб-сайта. Дополнительные сведения о повышении разрешений безопасности для приложения ClickOnce см. в разделе "Безопасные приложения ClickOnce".

Доступ к данным через веб-службу XML

Если предоставить данные в качестве веб-службы XML, можно осуществлять доступ к этим данным с помощью прокси-сервера веб-службы XML. Прокси-сервер — это класс платформа .NET Framework, создаваемый с помощью Visual Studio. Операции веб-службы XML, такие как извлечение клиентов, размещение заказов и т. д., предоставляются как методы прокси-сервера. Благодаря этому пользоваться веб-службами гораздо проще, чем обычным текстом или файлами XML.

Если ваш веб-служба XML работает по протоколу HTTP, в отношении нее будут действовать те же ограничения безопасности, как и в отношении классов WebClient и HttpWebRequest .

Доступ к базе данных напрямую

Можно использовать классы в пространстве имен System.Data для установки прямого подключения к серверу базы данных, например SQL Server в сети, однако при этом необходимо учитывать соображения безопасности. В отличие от HTTP-запросов, запросы на подключение к базе данных всегда запрещаются по умолчанию при частичном доверии; По умолчанию у вас будет только такое разрешение, если вы устанавливаете приложение ClickOnce из компакт-диска. Это обеспечивает приложению полный уровень доверия. Чтобы включить доступ к конкретной базе данных SQL Server, приложение должно запросить для него разрешение SqlClientPermission ; чтобы включить доступ к базе данных, отличной от БД SQL Server, необходимо запросить разрешение OleDbPermission.

Большую часть времени вам не придется обращаться к базе данных напрямую, но будет обращаться к ней через веб-серверное приложение, написанное в ASP.NET или веб-службе XML. Доступ к базе данных таким образом часто является лучшим способом, если приложение ClickOnce развертывается с веб-сервера. Доступ к серверу с частичным доверием можно осуществлять без повышения уровня разрешений вашего приложения.