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

Обновлен: Ноябрь 2007

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

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

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

  • каталог данных ClickOnce;

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

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

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

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

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

d8saf4wy.alert_note(ru-ru,VS.90).gifПримечание.

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

Маркировка файлов данных в рассылке ClickOnce

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

Операции чтения и записи в каталоге данных

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

d8saf4wy.alert_note(ru-ru,VS.90).gifПримечание.

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

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

If (ApplicationDeployment.IsNetworkDeployed) Then
    Dim SR As StreamReader = Nothing

    Try
        SR = New StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory & "\CSV.txt")
        MessageBox.Show(SR.ReadToEnd())
    Catch Ex As Exception
        MessageBox.Show("Could not read file.")
    Finally
        SR.Close()
    End Try
End If

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

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

Для работы с файлами других типов могут потребоваться дополнительные разрешения. Например, если требуется использовать файл (.mdb) базы данных Access, приложение должно подтвердить наличие полного доверия, чтобы использовать соответствующие классы 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 или Web Services Description Language Tool (Wsdl.exe). Операции веб-службы XML — такие как извлечение клиентов, размещение заказов и т. д. — раскрываются как методы прокси-агента. Это делает веб службы более простыми в использовании по сравнению с необработанным текстом и XML-файлами.

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

Примеры создания прокси-агентов веб-служб XML см. в статье Building XML Web Service Clients. Эту задачу можно также выполнить, используя Visual Studio. Дополнительные сведения см. в разделах Практическое руководство. Добавление и удаление веб-ссылок и Практическое руководство. Добавление и удаление веб-ссылок.

Непосредственный доступ к базе данных

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

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

См. также

Задачи

Практическое руководство. Включение файла данных в приложение ClickOnce

Другие ресурсы

Развертывание ClickOnce для приложений Windows Forms