Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Средства разработки клиентских программ (Обзор программных средств для создания баз данных)

Содержание:

Введение

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

Развитие информационно-коммуникационных технологий и появление новых позволило перевести все эти большие объемы информации в электронный вид. Появились системы управления базами данных (СУБД), которые позволили в значительной степени упростить работу практически во всех сферах деятельности: образовании, медицине, финансовых институтах, производственных предприятиях, криминалистике и т.д. СУБД обеспечивают правильность, полноту и непротиворечивость данных, а также удобный доступ к ним. Рассмотрим основные программные средства для реализации баз данных.

Целью курсовой работы является изучение средств разработки клиентских программ.

Задачи работы:

1. Рассмотреть теоретические аспекты изучения клиентских программ;

2. Изучить процесс создания клиентского приложения;

3. Определить доступ к веб-параметрам.

1. Теоретические аспекты изучения клиентских программ

1.1. Обзор программных средств для создания баз данных

Microsoft Access – прикладная программа пакета Microsoft Office, относится к реляционным, то есть построенным на основании таблиц, СУБД. Эта программа имеет широкий спектр функций, включая связанные запросы, связь с внешними таблицами и базами данных. Благодаря встроенному языку VBA, в Microsoft Access можно писать приложения, работающие с базами данных. При работе с СУБД Access взаимодействие с жёстким (или гибким) диском происходит иначе, нежели в других программах. Обычно файл сохраняется только после выполнения команды Файл – Сохранить. В Access при заполнении ячейки, данные сохраняются автоматически, что очень удобно и безопасно со стороны целостности данных. Основными преимуществами Access являются: простой дружелюбный интерфейс, широкий спектр возможностей, возможность программировать благодаря встроенному языку VBA.

Рассмотрим еще одну среду – Borland Delphi. Borland Delphi – это среда быстрой разработки приложений (RAD-среда, от Rapid Application Development – быстрая разработка приложений) на языке Delphi, в основе которого лежит язык Pascal.

Delphi является одним из наиболее популярных инструментов разработки прикладных программ. Она имеет функцию быстрой разработки, основанную на технологии визуального и событийного проектирования, то есть Delphi берет на себя большую часть работы, оставляя пользователю работу по созданию диалоговых окон и процедур обработки событий. Для начинающих при малом опыте программирования Delphi дает возможность создавать программы, неотличимые от программ, созданных профессионалами, а для опытного пользователя и вовсе открываются неограниченные возможности. Возможности Delphi практически безграничны. Если говорить о базах данных, то используя механизм BDE (Borland Database Engine – механизм доступа к базам данных), создаваемые формы и отчеты получают доступ к:

  • локальным базам данных, таким как Paradox и Dbase;
  • сетевым базам данных SQL Server, InterBase, SysBase;
  • любым другим источникам данных, доступным даже через ODBC (открытую связь с базами данных).

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

Еще одним представителем программных средств по работе с базами данных является программа Microsoft SQL Server, которую нельзя назвать лишь системой баз данных. Она является, большей частью, платформой, которая управляет структурированными, частично структурированными и вовсе неструктурированными данными, а также предоставляет всеобъемлющее, операционно-интегрированное и обладающее средствами анализа программное обеспечение, которое дает возможность организациям надежно управлять критически важной информацией[1].

Удобный интерфейс утилит администрирования, высокая производительность и относительно невысокая цена делают эту СУБД одной из популярных. Так же популярным Microsoft SQL Server делает наличие таких сервисов как Data Engine, сервис анализа (Analysis Services), сервисы отчетов (Reporting Services) и сервисы интеграции (Integration Services), что является лучшим выбором для специалистов, создающих базы данных. Microsoft SQL Server интегрируется с остальными программами из семейства Microsoft, такими как Visual Basic, Visual C++, Access, Visual FoxPro и разработками других производителей. Для этой цели имеются ODBC-драйвер и OLE DB-провайдер, а также содержащий их набор библиотек Microsoft Data Access Components (MDAC), позволяющий использовать в средствах разработки объекты ActiveX Data Objects (ADO) – COM-объекты для доступа к данным. В отличие от Oracle, Microsoft не производит средств разработки, использующих тот же самый язык программирования, что и язык для создания кода триггеров и хранимых процедур, однако производит средства отладки серверного кода (например, SQL Server Debugger входит в состав Visual Basic и Visual C++)[2].

Не менее популярной является программа Oracle. Компания Oracle выпустила первую в мире СУБД поддерживающий язык SQL. Ее первая версия вышла еще в 1979 году. Все это время она является лидером среди производителей СУБД и второй по величине компании по производству программного обеспечения. Будучи первыми создателями СУБД, Oracle первой использовала предоставляемые некоторыми серверными платформами средства параллельных вычислений – Oracle Parallel Server (до его появления параллельные вычисления использовались только для решения научных задач). Сейчас последние версии открывают перед пользователями большие возможности. Производя собственные средства разработки, Oracle предоставляет своим пользователям возможность создавать клиентские приложения с помощью других средств. В частности, помимо стандартного в таких случаях клиентского API (Oracle Call Interface), клиентская часть Oracle содержит также объектную модель (Oracle Objects for OLE), позволяющую использовать клиентскую часть Oracle как набор COM-объектов для доступа к данным. Кроме того, обычно клиентская часть Oracle содержит также ODBC-драйвер для доступа к данным этой СУБД. Отметим, что и многие другие компании производят ODBC-драйверы и OLE DB-провайдеры для доступа к Oracle (в частности, Microsoft). Компании, производящие средства разработки, использующие собственные библиотеки доступа к данным (такие как Inprise или Gupta/Centura), также включают библиотеки доступа к Oracle в состав наиболее дорогих версий своих продуктов.

Из готовых информационных систем на базе Oracle следует особо отметить несколько крупных систем управления предприятием, в частности SAP/R3. На Западе также нередко используются готовые решения от самой Oracle Corporation, объединенные под общим названием Oracle Applications, такие как Oracle Financials, Oracle Human Resources, Oracle Market Management, Oracle Project Systems и др[3].

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

1.2. Использование служб клиентских приложений

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

В руководстве выполняются следующие задачи:

  • Создание приложения Windows Forms и использование конструктора проектов Visual Studio для включения и настройки служб клиентских приложений.
  • Создание простого приложения веб-служб ASP.NET для размещения служб приложений и тестирования конфигурации клиента.
  • Реализация в приложении проверки подлинности с помощью форм. Сначала для тестирования службы будут использоваться жестко заданные имя пользователя и пароль. Затем вы добавите форму входа, указав ее в конфигурации приложения как поставщика учетных данных.
  • Добавление функций на основе ролей, создание и отображение кнопки только для пользователей с ролью "manager".
  • Доступ к веб-параметрам. Сначала в конструкторе проектов на странице Параметры вы загрузите веб-параметры (тестового) пользователя, прошедшего проверку подлинности. Затем с помощью конструктора Windows Forms вы привяжете текстовое поле к веб-параметру. После этого потребуется сохранить измененное значение на сервере.
  • Реализация выхода. Вы добавите в форму элемент для выхода, а затем вызовете метод Logout.
  • Включение автономного режима. Вы создадите флажок, с помощью которого пользователи смогут указывать состояние своего подключения. Указанное значение будет использоваться, чтобы определить, будут ли поставщики служб клиентских приложений использовать данные из локального кэша вместо доступа к своим веб-службам. При переходе приложения в режим "В сети" будет выполняться повторная проверка подлинности текущего пользователя.

2.Создание клиентского приложения

2.1.Создание узла служб приложений

В первую очередь следует создать проект Windows Forms. В этом пошаговом руководстве используется проект Windows Forms, поскольку с подобными проектами знакомо большинство разработчиков. Приведенные инструкции также актуальны для проектов Windows Presentation Foundation (WPF).

Создание клиентского приложения и включение служб клиентских приложений[4]

  1. В Visual Studio последовательно выберите пункты меню Файл | Создать | Проект.
  2. В диалоговом окне Новый проект на панели Типы проектов разверните узел Visual Basic или Visual C# и выберите тип проектаWindows.
  3. Убедитесь, что выбран пункт .NET Framework 3.5, а затем выберите шаблон Приложение Windows Forms.
  4. Измените Имя проекта на ClientAppServicesDemo и нажмите кнопку ОК.

В Visual Studio откроется новый проект Windows Forms.

  1. В меню Проект выберите пункт Свойства ClientAppServicesDemo.

Откроется конструктор проектов.

  1. На вкладке Службы установите флажок Включить службы клиентского приложения.
  2. Убедитесь, что выбран пункт Использовать проверку подлинности с помощью форм, а затем в полях Местонахождение службы проверки подлинности, Местонахождение службы ролей и Местонахождение службы веб-параметров введите значение http://localhost:55555/AppServices.
  3. Для Visual Basic задайте на вкладке Приложение в поле Режим проверки подлинности значение Определяется приложением.

Указанные параметры будут сохранены конструктором проектов в файле app.config.

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

Создание узла служб приложений.

В этом разделе вы создадите простое приложение веб-служб для доступа к пользовательским данным, хранящимся в файле локальной базы данных SQL Server Compact. Затем нужно будет заполнить базу данных при помощи ASP.NET Web Site Administration Tool[5]. Выполнив простую настройку, вы сможете быстро протестировать ваше клиентское приложение. В качестве альтернативы можно настроить узел веб-служб для доступа к пользовательским данным из заполненной базы данных SQL Server или с помощью пользовательских классов MembershipProviderи RoleProvider. Для получения дополнительной информации см. Creating and Configuring the Application Services Database for SQL Server.

В следующей процедуре описывается создание и настройка веб-службы AppServices.

Создание и настройка узла служб приложений

  1. В окне Обозреватель решений щелкните решение ClientAppServicesDemo, а затем в меню Файл выберите пункты Добавить| Создать проект.
  2. В диалоговом окне Добавление нового проекта на панели Типы проектов разверните узел Visual Basic или Visual C# и выберите тип проекта Веб.
  3. Убедитесь, что в раскрывающемся меню выше выбран пункт .NET Framework 3.5, а затем щелкните шаблон Приложение веб-служб ASP.NET.
  4. Измените Имя проекта на AppServices и нажмите кнопку ОК.

В решение будет добавлен новый проект приложения веб-служб ASP.NET, и в редакторе появится файл Service1.asmx.vb или Service1.asmx.cs.

  1. В Обозревателе решений щелкните проект AppServices, а затем в меню Проект выберите пункт Свойства AppServices.

Откроется конструктор проектов.

  1. Перейдите на вкладку Веб и убедитесь, что выбран пункт Использовать Visual Studio Development Server.
  2. Выберите пункт Указанный порт и укажите значение 55555, а затем в поле Виртуальный путь введите /AppServices.
  3. Сохраните все файлы.
  4. В Обозревателе решений откройте файл Web.config и найдите открывающий тег <system.web>.
  5. Перед тегом <system.web> вставьте приведенный ниже код.

Элементы authenticationService, profileService, и roleService в данном коде предназначены для включения и настройки служб приложений. В целях тестирования атрибуту requireSSL элемента authenticationService присвоено значение "false". Атрибуты readAccessProperties и writeAccessProperties элемента profileService указывают, что свойство WebSettingsTestText доступно для чтения и записи.

В рабочем коде следует всегда обращаться к службе проверки подлинности с помощью протокола SSL (с использованием протокола HTTPS). 

<system.web.extensions>

<scripting>

<webServices>

<authenticationService enabled="true" requireSSL = "false"/>

<profileService enabled="true"

readAccessProperties="WebSettingsTestText"

writeAccessProperties="WebSettingsTestText" />

<roleService enabled="true"/>

</webServices>

</scripting>

</system.web.extensions>

  1. После открывающего тега <system.web> вставьте приведенный ниже код, который должен принадлежать элементу <system.web>.

Элемент profile предназначен для настройки одного веб-параметра WebSettingsTestText.

<profile enabled="true" >

<properties>

<add name="WebSettingsTestText" type="string"

readOnly="false" defaultValue="DefaultText"

serializeAs="String" allowAnonymous="false" />

</properties>

</profile>

В следующей процедуре показано использование средства администрирования веб-сайта ASP.NET для завершения настройки службы и заполнения файла локальной базы данных. Вы добавите двух пользователей: employee и manager. Каждому будет присвоена роль с аналогичным именем. Пароли пользователей: employee! и manager! соответственно.

2.2.Настройка членства и ролей

  1. В Обозревателе решений щелкните проект AppServices, а затем в меню Проект выберите пункт Настройка ASP.NET.

Откроется Средство администрирования веб-сайта ASP.NET.

  1. На вкладке Безопасность щелкните ссылку Использовать мастер настройки безопасности для пошаговой установки параметров безопасности.

Откроется Мастер настройки безопасности и отобразится Экран приветствия.

  1. Нажмите кнопку Далее.

Отобразится страница Выбор способа доступа.

  1. Выберите Через Интернет. Вместо проверки подлинности Windows в службе будет использоваться проверка подлинности с помощью форм.
  2. Нажмите кнопку Далее дважды.

Отобразится страница Определение ролей.

  1. Установите флажок Включить роли для этого веб-сайта.
  2. Нажмите кнопку Далее. Отобразится форма Создание новой роли.
  3. В текстовом поле Имя новой роли введите manager и нажмите кнопку Добавить роль.

Отобразится таблица Существующие роли с указанным значением.

  1. В текстовом поле Имя новой роли замените manager на employee и нажмите кнопку Добавить роль.

В таблице Существующие роли появится новое значение.

  1. Нажмите кнопку Далее.

Отобразится страница Добавление новых пользователей.

  1. В форме Создание пользователя укажите следующие значения.

Имя пользователя

manager

Пароль

manager!

Подтверждение пароля

manager!

Электронная почта

manager@contoso.com

Контрольный вопрос

manager

Ответ на контрольный вопрос

manager

  1. Нажмите кнопку Создать пользователя.

Отобразится сообщение об успешном создании пользователя.

Поля формы Электронная почта, Контрольный вопрос и Ответ на контрольный вопрос обязательны для заполнения, но не используются в этом примере.

  1. Нажмите кнопку Продолжить.

Отобразится форма Создание пользователя.

  1. В форме Создание пользователя укажите следующие значения.

Имя пользователя

employee

Пароль

employee!

Подтверждение пароля

employee!

Электронная почта

employee@contoso.com

Контрольный вопрос

Employee

Ответ на контрольный вопрос

employee

  1. Нажмите кнопку Создать пользователя.

Отобразится сообщение об успешном создании пользователя.

  1. Нажмите кнопку Готово.

Снова откроется Средство администрирования веб-сайта.

  1. Выберите пункт Управление пользователями.

Отобразится список пользователей.

  1. Щелкните Изменить роли в строке employee и выберите роль employee.
  2. Щелкните Изменить роли в строке manager и выберите роль manager.
  3. Закройте окно браузера, в котором открыто Средство администрирования веб-сайта.
  4. Если появится окно сообщения с запросом на перезагрузку измененного файла Web.config, нажмите кнопку Да[6].

Это завершит настройку веб-службы. Вы можете нажать клавишу F5, чтобы запустить клиентское приложение. При этом будет автоматически запущен ASP.NET Development Server. Сервер продолжит работать после выхода из приложения, но при его перезапуске будет также перезапущен. Это позволит обнаружить все изменения, внесенные в файл Web.config.

Чтобы вручную остановить сервер, щелкните правой кнопкой мыши значок ASP.NET Development Server в области уведомлений на панели задач и выберите команду Остановить. Иногда это может потребоваться для выполнения чистого перезапуска.

2.3. Добавление проверки подлинности с помощью форм

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

Проверка пользователей в коде приложения

  1. В окне Обозреватель решений для проекта ClientAppServicesDemo добавьте ссылку на сборку System.Web.
  2. Щелкните файл Form1 и в главном меню Visual Studio выберите пункты Вид | Код.
  3. В редакторе кода добавьте следующие операторы в начале файла Form1.

C#

VB

using System.Net;

using System.Threading;

using System.Web.ClientServices;

using System.Web.ClientServices.Providers;

using System.Web.Security;

  1. В окне Обозреватель решений дважды щелкните файл Form1, чтобы отобразить конструктор.
  2. В конструкторе дважды щелкните поверхность формы, чтобы создать обработчик событий Form.Load с названием Form1_Load.

Откроется редактор кода, курсор окажется в области метода Form1_Load.

  1. Добавьте следующий код в метод Form1_Load.

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

Обратите внимание, что метод Membership.ValidateUser (static) включен в .NET Framework 2.0. Функции данного метода делегируются указанному поставщику проверки подлинности. В случае удачной проверки подлинности возвращается значение true. В вашем приложении не требуется прямых ссылок на поставщика проверки подлинности клиента.

C#

VB

if (!Membership.ValidateUser("manager", "manager!"))

{

MessageBox.Show("Unable to authenticate.", "Not logged in",

MessageBoxButtons.OK, MessageBoxIcon.Error);

Application.Exit();

Теперь вы можете запустить приложение с помощью клавиши F5. Поскольку вы указали правильные имя пользователя и пароль, отобразится форма.

Чтобы отобразить сообщение об ошибке, измените параметры ValidateUser. Например, замените значение второго параметра ("manager!") неправильным паролем (например, "MANAGER").

Добавление формы входа в качестве поставщика учетных данных

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

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

Настройка приложения на использование поставщика учетных данных

  1. В окне Обозреватель решений щелкните проект ClientAppServicesDemo, а затем в меню Проект выберите пункт Свойства ClientAppServicesDemo.

Откроется конструктор проектов.

  1. На вкладке Службы установите следующее значение для параметра Необязательно: поставщик учетных данных. Это значение определяет имя типа с указанием сборки.
  2. ClientAppServicesDemo.Login, ClientAppServicesDemo
  3. В файле с текстом программы Form1 замените код метода Form1_Load представленным ниже.

Этот код отображает приветственное сообщение, а затем вызывает метод ValidateUsingCredentialsProvider, который вы добавите в следующем шаге. Если пользователь не проходит проверку подлинности, метод ValidateUsingCredentialsProviderвозвращает значение false, а также выполняется возврат метода Form1_Load. Это позволяет предотвратить выполнение любого дополнительного кода до выхода из приложения. Приветственное сообщение позволяет понять, когда выполняется перезапуск приложения. Добавление кода перезапуска приложения описывается ниже в разделе "Реализация выхода"[7].

C#

VB

MessageBox.Show("Welcome to the Client Application Services Demo.",

"Welcome!");

if (!ValidateUsingCredentialsProvider()) return;

  1. Добавьте приведенный ниже метод после метода Form1_Load.

Этот метод передает пустые строки методу Membership.ValidateUser (static), благодаря которому отображается диалоговое окно входа. Если служба проверки подлинности недоступна, метод ValidateUser вызывает исключение WebException. В этом случае метод ValidateUsingCredentialsProvider отобразит предупреждающее сообщение и предложение повторить попытку в автономном режиме. Для этого требуется включить функцию Локально сохранять хэш пароля для обеспечения входа вне сети, как описано в разделе Практическое руководство. Настройка служб клиентских приложений. Для новых проектов эта функция включена по умолчанию.

Если пользователь не прошел проверку подлинности, метод ValidateUsingCredentialsProvider отображает сообщение об ошибке и завершает работу приложения. Этот метод также возвращает результат попытки проверки подлинности.

C#

VB

private bool ValidateUsingCredentialsProvider()

{

bool isAuthorized = false;

try

{

// Call ValidateUser with empty strings in order to display the

// login dialog box configured as a credentials provider.

isAuthorized = Membership.ValidateUser(

String.Empty, String.Empty);

}

catch (System.Net.WebException)

{

if (DialogResult.OK == MessageBox.Show(

"Unable to access the authentication service." +

Environment.NewLine + "Attempt login in offline mode?",

"Warning", MessageBoxButtons.OKCancel,

MessageBoxIcon.Warning))

{

ConnectivityStatus.IsOffline = true;

isAuthorized = Membership.ValidateUser(

String.Empty, String.Empty);

}

}

if (!isAuthorized)

{

MessageBox.Show("Unable to authenticate.", "Not logged in",

MessageBoxButtons.OK, MessageBoxIcon.Error);

Application.Exit();

}

return isAuthorized;

}

Создание формы входа

Поставщик учетных данных — это класс, реализующий интерфейс IClientFormsAuthenticationCredentialsProvider. Этот интерфейс содержит один метод с именем GetCredentials, возвращающий объект ClientFormsAuthenticationCredentials. В следующей процедуре описывается создание диалогового окна входа. Для отображения окна и возвращения указанных пользователем учетных данных используется методGetCredentials.

Для Visual Basic и C# представлены отдельные инструкции, так как в Visual Basic доступен шаблон Форма входа. Это позволяет сократить время и затраты на кодирование.

Создание диалогового окна входа как поставщика учетных данных в Visual Basic

  1. На панели Обозреватель решений щелкните проект ClientAppServicesDemo, а затем в меню Проект выберите пункт Добавить новый элемент.
  2. В диалоговом окне Добавление нового элемента выберите шаблон Форма входа, измените Имя на Login.vb и нажмите кнопку Добавить.

В конструкторе Windows Forms отобразится диалоговое окно входа.

  1. В конструкторе нажмите кнопку OK, а затем в окне Свойства выберите для параметра DialogResult значение OK.
  2. В конструкторе добавьте в форму элемент управления CheckBox под текстовым полем Пароль.
  3. В окне Свойства укажите для параметра (Name) значение rememberMeCheckBox, а для параметра Text — &Remember me.
  4. В главном меню Visual Studio выберите пункты Вид | Код.
  5. В редакторе кода добавьте в начало файла следующий код.

VB

Imports System.Web.ClientServices.Providers

  1. Измените сигнатуру класса, чтобы обеспечить реализацию интерфейса IClientFormsAuthenticationCredentialsProvider.

VB

Public Class Login

Implements IClientFormsAuthenticationCredentialsProvider

  1. Установите курсор после кода интерфейса IClientformsAuthenticationCredentialsProvider и нажмите клавишу ВВОД, чтобы создать метод GetCredentials.
  2. Найдите код, с помощью которого реализуется метод GetCredentials, и замените его на приведенный ниже.

VB

Public Function GetCredentials() As _

ClientFormsAuthenticationCredentials Implements _

IClientFormsAuthenticationCredentialsProvider.GetCredentials

If Me.ShowDialog() = DialogResult.OK Then

Return New ClientFormsAuthenticationCredentials( _

UsernameTextBox.Text, PasswordTextBox.Text, _

rememberMeCheckBox.Checked)

Else

Return Nothing

End If

End Function

В следующей процедуре для C# приводится полный код создания простого диалогового окна входа. Макет этого диалогового окна достаточно приблизителен, однако главный интерес здесь представляет реализация метода GetCredentials.

Создание диалогового окна входа как поставщика учетных данных в C#

  1. В окне Обозреватель решений щелкните проект ClientAppServicesDemo, а затем в меню Проект выберите пункт Добавить класс.
  2. В диалоговом окне Добавление нового элемента измените Имя на Login.cs и нажмите кнопку Добавить.

В редакторе кода откроется файл Login.cs.

  1. Замените код по умолчанию представленным ниже.

C#

using System.Windows.Forms;

using System.Web.ClientServices.Providers;

namespace ClientAppServicesDemo

{

class Login : Form,

IClientFormsAuthenticationCredentialsProvider

{

private TextBox usernameTextBox;

private TextBox passwordTextBox;

private CheckBox rememberMeCheckBox;

private Button OK;

private Button cancel;

private Label label1;

private Label label2;

public ClientFormsAuthenticationCredentials GetCredentials()

{

if (this.ShowDialog() == DialogResult.OK)

{

return new ClientFormsAuthenticationCredentials(

usernameTextBox.Text, passwordTextBox.Text,

rememberMeCheckBox.Checked);

}

else

{

return null;

}

}

public Login()

{

InitializeComponent();

}

private void CloseForm(object sender, System.EventArgs e)

{

this.Close();

}

private void InitializeComponent()

{

this.label1 = new System.Windows.Forms.Label();

this.usernameTextBox = new System.Windows.Forms.TextBox();

this.label2 = new System.Windows.Forms.Label();

this.passwordTextBox = new System.Windows.Forms.TextBox();

this.rememberMeCheckBox = new System.Windows.Forms.CheckBox();

this.OK = new System.Windows.Forms.Button();

this.cancel = new System.Windows.Forms.Button();

this.SuspendLayout();

//

// label1

//

this.label1.AutoSize = true;

this.label1.Location = new System.Drawing.Point(13, 13);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size(58, 13);

this.label1.TabIndex = 0;

this.label1.Text = "&User name";

//

// usernameTextBox

//

this.usernameTextBox.Location = new System.Drawing.Point(13, 30);

this.usernameTextBox.Name = "usernameTextBox";

this.usernameTextBox.Size = new System.Drawing.Size(157, 20);

this.usernameTextBox.TabIndex = 1;

//

// label2

//

this.label2.AutoSize = true;

this.label2.Location = new System.Drawing.Point(13, 57);

this.label2.Name = "label2";

this.label2.Size = new System.Drawing.Size(53, 13);

this.label2.TabIndex = 2;

this.label2.Text = "&Password";

//

// passwordTextBox

//

this.passwordTextBox.Location = new System.Drawing.Point(13, 74);

this.passwordTextBox.Name = "passwordTextBox";

this.passwordTextBox.PasswordChar = '*';

this.passwordTextBox.Size = new System.Drawing.Size(157, 20);

this.passwordTextBox.TabIndex = 3;

//

// rememberMeCheckBox

//

this.rememberMeCheckBox.AutoSize = true;

this.rememberMeCheckBox.Location = new System.Drawing.Point(13, 101);

this.rememberMeCheckBox.Name = "rememberMeCheckBox";

this.rememberMeCheckBox.Size = new System.Drawing.Size(94, 17);

this.rememberMeCheckBox.TabIndex = 4;

this.rememberMeCheckBox.Text = "&Remember me";

this.rememberMeCheckBox.UseVisualStyleBackColor = true;

//

// OK

//

this.OK.DialogResult = System.Windows.Forms.DialogResult.OK;

this.OK.Location = new System.Drawing.Point(13, 125);

this.OK.Name = "OK";

this.OK.Size = new System.Drawing.Size(75, 23);

this.OK.TabIndex = 5;

this.OK.Text = "&OK";

this.OK.UseVisualStyleBackColor = true;

//

// cancel

//

this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;

this.cancel.Location = new System.Drawing.Point(95, 125);

this.cancel.Name = "cancel";

this.cancel.Size = new System.Drawing.Size(75, 23);

this.cancel.TabIndex = 6;

this.cancel.Text = "&Cancel";

this.cancel.UseVisualStyleBackColor = true;

//

// Login

//

this.AcceptButton = this.OK;

this.CancelButton = this.cancel;

this.ClientSize = new System.Drawing.Size(187, 168);

this.Controls.Add(this.cancel);

this.Controls.Add(this.OK);

this.Controls.Add(this.rememberMeCheckBox);

this.Controls.Add(this.passwordTextBox);

this.Controls.Add(this.label2);

this.Controls.Add(this.usernameTextBox);

this.Controls.Add(this.label1);

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;

this.MaximizeBox = false;

this.MinimizeBox = false;

this.Name = "Login";

this.Text = "Login";

this.ResumeLayout(false);

this.PerformLayout();

}

}

}

Теперь можно запустить приложение. Отобразится диалоговое окно входа. Чтобы проверить код, попробуйте вводить разные учетные данные, как действительные, так и недействительные. Доступ к форме должен открываться только при вводе действительных учетных данных. Допустимые имена пользователей — employee и manager с паролями employee! и manager! соответственно.

Добавление функций на основе ролей

В следующей процедуре вы добавите в форму кнопку, которая будет отображаться только для пользователей с ролью "manager".

Изменение пользовательского интерфейса в зависимости от роли пользователя

  1. В Обозревателе решений найдите проект ClientAppServicesDemo, щелкните форму Form1 и выберите в главном меню Visual Studio пункты Вид | Конструктор.
  2. В конструкторе откройте меню Панель элементов и добавьте в форму элемент управления Button.
  3. В окне Свойства задайте следующие свойства кнопки.

Свойство

Значение

(Имя)

managerOnlyButton

Text

&Manager task

Показывается

False

  1. В редакторе кода формы Form1 добавьте в конце метода Form1_Load приведенный ниже код.

Этот код вызывает метод DisplayButtonForManagerRole, который будет добавлен в следующем шаге.

C#

VB

DisplayButtonForManagerRole();

  1. В конце класса Form1 добавьте приведенный ниже метод.

Этот метод вызывает метод IsInRole интерфейса IPrincipal, возвращенного свойством Thread.CurrentPrincipal (static). Для приложений, настроенных на использование служб клиентских приложений, это свойство возвращает класс ClientRolePrincipal. Поскольку этот класс реализует интерфейс IPrincipal, необязательно явно ссылаться на него.

Если пользователю назначена роль "manager", метод DisplayButtonForManagerRole присваивает свойству Visible кнопки managerOnlyButton значение true. При вызове исключения WebException этот метод также отображает сообщение об ошибке, означающее, что служба ролей недоступна.

При истечении допустимого времени в системе метод IsInRole всегда возвращает значение false. Этого не происходит, если приложение вызывает метод IsInRole один раз вскоре после проверки подлинности, как показано в примере кода, который используется в этом руководстве. Если необходимо, чтобы приложение извлекало роли пользователей в другое время, вы можете добавить код для повторной проверки пользователей, чье допустимое время в системе истекло. Если всем допустимым пользователям назначены роли, вы можете выявлять истечение допустимого времени, вызывая метод ClientRoleProvider.GetRolesForUser. Если роли не возвращаются, значит время истекло. Пример реализации этой возможности — метод GetRolesForUser. Данная функция необходима лишь в случае, если в параметрах приложения вы выбрали пункт Требовать, чтобы пользователи повторяли вход, если у файла cookie сервера истек срок действия. 

C#

VB

private void DisplayButtonForManagerRole()

{

try

{

if (Thread.CurrentPrincipal.IsInRole("manager"))

{

managerOnlyButton.Visible = true;

}

}

catch (System.Net.WebException)

{

MessageBox.Show("Unable to access the role service.",

"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

}

В случае успешной проверки подлинности поставщик проверки подлинности клиента назначает свойство Thread.CurrentPrincipal экземпляру класса ClientRolePrincipal. Этот класс реализует метод IsInRole — функции делегируются заданному поставщику ролей. Как и ранее, в коде приложения не требуются прямые ссылки на поставщика услуг.

Теперь можно запустить приложение и войти в систему с именем пользователя "employee", чтобы убедиться, что кнопка не отображается. После этого попробуйте войти с именем "manager" — кнопка должна отображаться.

3. Доступ к веб-параметрам

В следующей процедуре вы добавите на форму текстовое поле и привяжете его к веб-параметрам. Как и в ранее описанном коде, с помощью которого были реализованы проверка подлинности и доступ к функциям в зависимости от ролей, в коде ваших параметров не требуется прямых ссылок на поставщика параметров. Вместо этого используется строго типизированный класс Settings(Properties.Settings.Default в C# и My.Settings в Visual Basic), созданный в вашем проекте с помощью Visual Studio.

Использование веб-параметров в пользовательском интерфейсе

  1. Проверьте область уведомлений на панели задач и убедитесь, что Сервер веб-разработки ASP.NET запущен. Если вы останавливали сервер, перезапустите приложение и закройте диалоговое окно входа. Сервер будет запущен автоматически.
  2. В окне Обозреватель решений щелкните проект ClientAppServicesDemo, а затем в меню Проект выберите пункт Свойства ClientAppServicesDemo.

Откроется конструктор проектов.

  1. На вкладке Параметры выберите команду Загрузить веб-параметры.

Появится диалоговое окно Имя для входа.

  1. Введите учетные данные для пользователя "employee" или "manager" и нажмите кнопку Войти. Получить доступ веб-параметрам, которые будут использоваться в дальнейшем, могут только пользователи, прошедшие проверку подлинности. Если нажать кнопку Пропустить вход, параметры не будут загружены.

В конструкторе появится параметр WebSettingsTestText со значением по умолчанию DefaultText. В вашем проекте также будет создан класс Settings, содержащий свойство WebSettingsTestText.

  1. В Обозревателе решений найдите проект ClientAppServicesDemo, щелкните форму Form1 и выберите в главном меню Visual Studio пункты Вид | Конструктор.
  2. В конструкторе добавьте на форму элемент управления TextBox.
  3. В окне Свойства укажите для параметра (Name) значение webSettingsTestTextBox.
  4. В редакторе кода добавьте в конце метода Form1_Load приведенный ниже код.

Этот код вызывает метод BindWebSettingsTestTextBox, который будет добавлен в следующем шаге.

C#

VB

BindWebSettingsTestTextBox();

  1. В конце класса Form1 добавьте приведенный ниже метод.

Этот метод привязывает свойство Text метода webSettingsTestTextBox к свойству WebSettingsTestText класса Settings, создание которого описывалось ранее в этой процедуре. При вызове исключения WebException этот метод также отображает сообщение об ошибке, означающее, что служба веб-параметров недоступна.

C#

VB

private void BindWebSettingsTestTextBox()

{

try

{

this.webSettingsTestTextBox.DataBindings.Add("Text",

Properties.Settings.Default, "WebSettingsTestText");

}

catch (WebException)

{

MessageBox.Show("Unable to access the Web settings service.",

"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

}

C#

VB

webSettingsTestTextBox.Text =

Properties.Settings.Default.WebSettingsTestText;

  1. В конструкторе выберите форму, а затем в окне Свойства нажмите кнопку События.
  2. Выберите событие FormClosing и нажмите клавишу ВВОД, чтобы создать обработчик события.
  3. Замените созданный метод приведенным ниже кодом.

Обработчик события FormClosing вызывает метод SaveSettings, также используемый функцией выхода, которая будет добавлена в следующем разделе. Метод SaveSettings сначала проверяет, не вышел ли пользователь из системы. Это достигается путем проверки свойства AuthenticationTypeIIdentity, возвращенного текущим субъектом. Текущий субъект устанавливается с помощью свойства CurrentPrincipal (static). Если пользователь прошел проверку подлинности служб клиентских приложений, используется проверка подлинности типа "ClientForms". Метод SaveSettings не может просто проверить свойство IIdentity.IsAuthenticated, поскольку после выхода у пользователя может иметься допустимое удостоверение Windows.

Если пользователь не выходил из системы, метод SaveSettings вызывает метод Save, принадлежащий классу Settings. Создание этого класса описывалось выше. При истечении срока действия файла cookie проверки подлинности этот метод может вызвать исключение WebException. Это возможно лишь в случае, если в параметрах приложения вы выбрали пункт Требовать, чтобы пользователи повторяли вход, если у файла cookie сервера истек срок действия. Дополнительные сведения см. в разделе Практическое руководство. Настройка служб клиентских приложений. При истечении срока действия файлов cookie метод SaveSettings вызывает метод ValidateUser для отображения диалогового окна входа в систему. В случае успешного входа пользователя метод SaveSettings вызывает сам себя, предпринимая попытку повторного сохранения параметров.

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

C#

VB

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

SaveSettings();

}

private void SaveSettings()

{

// Return without saving if the authentication type is not

// "ClientForms". This indicates that the user is logged out.

if (!Thread.CurrentPrincipal.Identity.AuthenticationType

.Equals("ClientForms")) return;

try

{

Properties.Settings.Default.Save();

}

catch (WebException ex)

{

if (ex.Message.Contains("You must log on to call this method."))

{

MessageBox.Show(

"Your login has expired. Please log in again to save " +

"your settings.", "Attempting to save settings...");

try

{

// Call ValidateUser with empty strings in order to

// display the login dialog box configured as a

// credentials provider.

if (!Membership.ValidateUser(String.Empty, String.Empty))

{

MessageBox.Show("Unable to authenticate. " +

"Settings were not saved on the remote service.",

"Not logged in", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

else

{

// Try again.

SaveSettings();

}

}

catch (System.Net.WebException)

{

MessageBox.Show(

"Unable to access the authentication service. " +

"Settings were not saved on the remote service.",

"Not logged in", MessageBoxButtons.OK,

MessageBoxIcon.Warning);

}

}

else

{

MessageBox.Show("Unable to access the Web settings service. " +

"Settings were not saved on the remote service.",

"Not logged in", MessageBoxButtons.OK,

MessageBoxIcon.Warning);

}

}

}

  1. В конце класса Form1 добавьте приведенный ниже метод.

Этот код обрабатывает событие ClientSettingsProvider.SettingsSaved и отображает предупреждение, если какие-либо параметры не удалось сохранить. Если служба параметров недоступна или истек срок действия файла cookie проверки подлинности, событие SettingsSaved не происходит. Событие SettingsSaved происходит, например, если пользователь уже вышел из системы. Вы можете проверить этот обработчик событий, непосредственно перед вызовом метода Save добавив в метод SaveSettings код выхода. Код выхода, который можно при этом использовать, описывается в следующем разделе.

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);

}

}

  1. При использовании 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 проверки подлинности. Однако иногда доступ к приложению может потребоваться нескольким пользователям, или же какой-либо пользователь может войти в систему с другими учетными данными. Для таких случаев необходимо реализовать функцию выхода с помощью процедуры, описанной далее.

Реализация функции выхода

  1. В конструкторе откройте меню Панель элементов и добавьте на форму Form1 элемент управления Button.
  2. В окне Свойства укажите для параметра (Name) значение logoutButton, а для параметра Text — &Выйти.
  3. Дважды щелкните кнопку logoutButton, чтобы создать обработчик события Click.

Откроется редактор кода, курсор окажется в области метода logoutButton_Click.

  1. Замените созданный метод 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. Это означает, для каждого пользователя и приложения автономное состояние хранится отдельно.

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

Включение автономного режима в приложении

  1. В Обозревателе решений найдите проект ClientAppServicesDemo, щелкните форму Form1 и выберите в главном меню Visual Studio пункты Вид | Конструктор.
  2. В конструкторе добавьте на форму элемент управления CheckBox.
  3. В окне Свойства укажите для параметра (Name) значение workOfflineCheckBox, а для параметра Text — &Автономная работа.
  4. В окне Свойства нажмите кнопку События.
  5. Выберите событие CheckedChanged и нажмите клавишу ВВОД, чтобы создать обработчик события.
  6. Замените созданный метод приведенным ниже кодом.

Этот код обновляет значение 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;

}

}

}

  1. Чтобы флажок точно соответствовал текущему состоянию подключения, добавьте в конце метода 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с.

12. Гагарина Л.Г. Основы технологии и разработки программных продуктов: Учебник - М: Мир, 2011, - 290 с.

13. Семенов М.И. Трубилин И.Т., Лойко В.И. Барановская Т.П. Архитектура компьютерных систем сетей. Учебное пособие - М Финансы и статистика, 2015, - 320с.

14. Глушаков С.В., Жакин И.А., Хачиров Т.С. Программирование Web - страниц. Учебный курс - СПб.: Питер, 2014, - 320 с.

  1. Глушаков С.В., Жакин И.А., Хачиров Т.С. Программирование Web - страниц. Учебный курс - СПб.: Питер, 2014, - с.143

  2. Семенов М.И. Трубилин И.Т., Лойко В.И. Барановская Т.П. Архитектура компьютерных систем сетей. Учебное пособие - М Финансы и статистика, 2015, - с. 165

  3. Ахтырченко К.В. Распределенные объектные технологии в инормационных системах. - М. : Мир, 2014, - с. 154

  4. Эммерих В. Конструирование распределенных объектов. Методы и средства программирования. : учебник по курсу «Распределенные объектные технологии» / В. Эммерих. - М. : Мир, 2012, - с. 143

  5. Ахтырченко К.В. Распределенные объектные технологии в инормационных системах. - М. : Мир, 2014, - с. 198

  6. Эммерих В. Конструирование распределенных объектов. Методы и средства программирования. : учебник по курсу «Распределенные объектные технологии» / В. Эммерих. - М. : Мир, 2012, - с.165

  7. Семенов М.И. Трубилин И.Т., Лойко В.И. Барановская Т.П. Архитектура компьютерных систем сетей. Учебное пособие - М Финансы и статистика, 2015, - с. 198