Добавлен: 26.05.2023
Просмотров: 84
Скачиваний: 3
СОДЕРЖАНИЕ
1. Теоретические аспекты изучения клиентских программ
1.1. Обзор программных средств для создания баз данных
1.2. Использование служб клиентских приложений
2.Создание клиентского приложения
2.1.Создание узла служб приложений
2.2.Настройка членства и ролей
2.3. Добавление проверки подлинности с помощью форм
C#
VB
private void Form1_SettingsSaved(object sender,
SettingsSavedEventArgs e)
{
// If any settings were not saved, display a list of them.
if (e.FailedSettingsList.Count > 0)
{
String failedSettings = String.Join(
Environment.NewLine,
e.FailedSettingsList.ToArray());
String message = String.Format("{0}{1}{1}{2}",
"The following setting(s) were not saved:",
Environment.NewLine, failedSettings);
MessageBox.Show(message, "Unable to save settings",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
- При использовании C# добавьте в конце метода Form1_Load следующий код. Это позволит связать добавленный в последнем шаге метод с событием SettingsSaved.
C#
((ClientSettingsProvider)Properties.Settings.Default.Providers
["System.Web.ClientServices.Providers.ClientSettingsProvider"])
.SettingsSaved +=
new EventHandler<SettingsSavedEventArgs>(Form1_SettingsSaved);
Чтобы проверить приложение на данном этапе, запустите его несколько раз, пробуя входить в систему с именем "employee" и "manager" и вводя в текстовое поле разные значения. Для каждого пользователя эти значения будут сохраняться между сеансами.
3.1.Реализация выхода
Если при входе установить флажок Запомнить мои данные, при следующих запусках приложения проверка подлинности будет выполняться автоматически. Автоматическая проверка подлинности продолжит выполняться, пока приложение находится в автономном режиме или до истечения срока действия файла cookie проверки подлинности. Однако иногда доступ к приложению может потребоваться нескольким пользователям, или же какой-либо пользователь может войти в систему с другими учетными данными. Для таких случаев необходимо реализовать функцию выхода с помощью процедуры, описанной далее.
Реализация функции выхода
- В конструкторе откройте меню Панель элементов и добавьте на форму Form1 элемент управления Button.
- В окне Свойства укажите для параметра (Name) значение logoutButton, а для параметра Text — &Выйти.
- Дважды щелкните кнопку logoutButton, чтобы создать обработчик события Click.
Откроется редактор кода, курсор окажется в области метода logoutButton_Click.
- Замените созданный метод logoutButton_Click приведенным ниже кодом.
Этот обработчик событий сначала вызывает метод SaveSettings, добавление которого описывается в прошлом разделе. Затем обработчик событий вызывает метод ClientFormsAuthenticationMembershipProvider.Logout. Если служба проверки подлинности недоступна, метод Logout вызывает исключение WebException. В этом случае метод logoutButton_Click отображает предупреждающее сообщение и временно переводит приложение в автономный режим, чтобы пользователь вышел из системы.Автономный режим описывается в следующем разделе.
При выходе удаляется локальный файл cookie проверки подлинности, поэтому при перезапуске приложения потребуется выполнить повторный вход в систему. После выхода обработчик события перезапускает приложение. При перезапуске программы отображается приветственное сообщение, а затем — диалоговое окно входа. Приветственное сообщение позволяет понять, что приложение было перезапущено. Это позволяет избежать путаницы в случаях, когда пользователю требуется войти в систему для сохранения параметров, а затем снова выполнить вход из-за перезапуска приложения.
C#
VB
private void logoutButton_Click(object sender, EventArgs e)
{
SaveSettings();
ClientFormsAuthenticationMembershipProvider authProvider =
(ClientFormsAuthenticationMembershipProvider)
System.Web.Security.Membership.Provider;
try
{
authProvider.Logout();
}
catch (WebException ex)
{
MessageBox.Show("Unable to access the authentication service." +
Environment.NewLine + "Logging off locally only.",
"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
ConnectivityStatus.IsOffline = true;
authProvider.Logout();
ConnectivityStatus.IsOffline = false;
}
Application.Restart();
}
Чтобы проверить функцию выхода, запустите приложение и установите в диалоговом окне входа флажок Запомнить мои данные. После этого закройте и заново откройте приложение, чтобы проверить, что при входе больше не требуется вводить учетные данные. Наконец, нажмите кнопку "Выход", чтобы перезапустить приложение.
3.2.Включение автономного режима
В следующей процедуре описывается добавление на форму флажка перехода в автономный режим. Приложение переводится в автономный режим при присвоении свойству ConnectivityStatus.IsOffline (static) значения true. Автономное состояние хранится на локальном жестком диске в расположении, заданном свойством Application.UserAppDataPath. Это означает, для каждого пользователя и приложения автономное состояние хранится отдельно.
В автономном режиме вместо попыток прямого доступа к службам все запросы служб клиентских приложений извлекают данные из локального кэша. По умолчанию локальные данные содержат зашифрованный пароль пользователя. Это позволят пользователю входить в систему, когда приложение находится в автономном режиме. Дополнительные сведения см. в разделе Практическое руководство. Настройка служб клиентских приложений.
Включение автономного режима в приложении
- В Обозревателе решений найдите проект ClientAppServicesDemo, щелкните форму Form1 и выберите в главном меню Visual Studio пункты Вид | Конструктор.
- В конструкторе добавьте на форму элемент управления CheckBox.
- В окне Свойства укажите для параметра (Name) значение workOfflineCheckBox, а для параметра Text — &Автономная работа.
- В окне Свойства нажмите кнопку События.
- Выберите событие CheckedChanged и нажмите клавишу ВВОД, чтобы создать обработчик события.
- Замените созданный метод приведенным ниже кодом.
Этот код обновляет значение IsOffline и автоматически выполняет проверку подлинности пользователя при подключении к Интернету. В методе ClientFormsIdentity.RevalidateUser используются кэшированные учетные данные, поэтому пользователю не требуется явным образом входить в систему. Если служба проверки подлинности недоступна, отобразится предупреждающее сообщение и приложение останется в автономном режиме.
Метод RevalidateUser предназначен исключительно для удобства. Поскольку у него отсутствуют возвращаемые значения, с его помощью нельзя выявлять ошибки при повторных проверках подлинности. Ошибка проверки подлинности может возникнуть, например, при изменении учетных данных пользователя на сервере. В этом случае вы можете использовать код, с помощью которого после ошибок вызова служб будет выполняться явная проверка подлинности пользователей.
После повторной проверки подлинности этот код вызывает метод SaveSettings, добавление которого рассматривается выше, чтобы сохранить все изменения локальных веб-параметров. Затем с помощью этого кода на сервере извлекаются все новые значения путем вызова метода Reload класса проекта Settings (Properties.Settings.Default в C# и My.Settings в Visual Basic).
C#
VB
private void workOfflineCheckBox_CheckedChanged(
object sender, EventArgs e)
{
ConnectivityStatus.IsOffline = workOfflineCheckBox.Checked;
if (!ConnectivityStatus.IsOffline)
{
try
{
// Silently re-validate the user.
((ClientFormsIdentity)
System.Threading.Thread.CurrentPrincipal.Identity)
.RevalidateUser();
// If any settings have been changed locally, save the new
// new values to the Web settings service.
SaveSettings();
// If any settings have not been changed locally, check
// the Web settings service for updates.
Properties.Settings.Default.Reload();
}
catch (WebException)
{
MessageBox.Show(
"Unable to access the authentication service. " +
Environment.NewLine + "Staying in offline mode.",
"Warning", MessageBoxButtons.OK,
MessageBoxIcon.Warning);
workOfflineCheckBox.Checked = true;
}
}
}
- Чтобы флажок точно соответствовал текущему состоянию подключения, добавьте в конце метода Form1_Load следующий код.
C#
VB
workOfflineCheckBox.Checked = ConnectivityStatus.IsOffline;
На этом создание примера приложения завершено. Чтобы проверить функции программы в автономном режиме, запустите приложение, войдите в систему, используя имя "employee" или "manager", а затем установите флажок Автономная работа. Измените значение в текстовом поле и закройте приложение. Перезапустите программу. Перед повторным входом щелкните правой кнопкой мыши значок сервера разработки ASP.NET в области уведомлений на панели задач и выберите команду Остановить. После этого войдите в систему обычным образом. Даже если сервер остановлен, вход должен пройти успешно. Измените значение в текстовом поле и перезапустите приложение, чтобы проверить, сохранились ли изменения.
Заключение
В этой работе было рассмотрено, как включить и использовать службы клиентских приложений в программе Windows Forms. После настройки тестового сервера вы добавили в свое приложение код для проверки подлинности пользователей и для извлечения с сервера пользовательских ролей и параметров приложения. Вы также узнали, как включить автономный режим, чтобы вместо удаленных служб приложение использовало данные из локального кэша, если установить подключение невозможно.
В реальности удаленный сервер с используемыми данными множества пользователей может быть не всегда доступен или неожиданно прекратить работу. Для создания надежных приложений необходимо предусмотреть ситуации, когда служба недоступна.
В рабочем коде на этот случай может потребоваться возможность перехода в автономный режим, выхода из приложения или блокирования определенных функций.
Чтобы повысить безопасность ваших приложений, тщательно тестируйте программы и серверы перед развертыванием.
Список использованных источников
1. Бройдо В.Л. «Вычислительные системы, сети и телекоммуникации». Санкт-Петербург: «Питер» 2012, - 475 с.
2. Никоза А.В. Компьютерные технологии в области автоматизации и управления. - СПБГЭТУ (ЛЭТИ) , 2013, - 325 с.
3. Петров В.Н. Информационные системы - СПб.: Питер, 2010,- 258 с.
4. Зрюмов Е.А., Зрюмова А.Г. Базы данных для инженеров. - М: Финансы и статистика, 2010, - 235 с.
5. Канер С., Фолк Д., Кен Нгуен Е. Тестирование программного обеспечения. - ДиаСофт, 2012, - 544с.
6. Изимбал А. А., Анишина М.Л. Технология создания распределенных систем для профессионалов - СПб: 2013, - 580 с.
7. Ахтырченко К.В. Распределенные объектные технологии в инормационных системах. - М. : Мир, 2014, - 560 с.
8. Эммерих В. Конструирование распределенных объектов. Методы и средства программирования. : учебник по курсу «Распределенные объектные технологии» / В. Эммерих. - М. : Мир, 2012, - 510 с.
9. Таненбаум Э.М. Распределенные системы. Принципы и парадигмы/ Э.М. Таненбаум. - СПб. : ПИТЕР, 2011,- 877 с.
10. Кен Арнолд, Джеймс Гослинг, Дэвид Холмс. Язык программирования Java, 3-е изд. пер. с. англ. -М: изд. дом «Вильямс», 2012, - 476 с.
11. Советов Б.Я. Цеханковский В.В. Информационные технологии - М Высшая школа, 2011, - 480с.