Asp координация обработки клиент сервер


Содержание

Технология активных серверных страниц ASP

ASP (англ. Active Server Pages — «активные серверные страницы») — технология, предложенная компанией Microsoft для создания Web-приложений в 1996 году вместо провалившегося проекта Dynamic HTML, в котором была сделана попытка «динамизировать» web-страницы за счет модернизации HTML, внедрением в него «динамических тэгов», то есть тэгов, имеющих алгоритмические свойства наподобие объектов в ООП. Но появление JavaScript от корпорации Netscape сделало это бессмысленным.

Технология ASP также, как и Dynamic HTML, основана на внедрении в обыкновенные веб-страницы специальных элементов управления, допускающих программное управление, но с куда большим риском для безопасности клиента.

По своей сути, ASP — это технология динамического создания страниц на стороне сервера, приблизившая проектирование и реализацию Web-приложений к той модели, по которой проектируются и реализуются обычные приложения.

Для реализации приложений ASP используются языки сценариев (VBScript или JScript). Также допускается применение COM-компонентов.

Технология ASP разработана для операционных систем из семейства Windows NT/Server и функционирует под управлением веб-сервера Microsoft IIS.

Технология ASP получила своё развитие в виде ASP.NET — технологии создания веб-приложений, основанной уже на платформе Microsoft .NET.

Синтаксис

Страница на ASP — это обычная страница HTML, со вставками, обозначенными ограничителями :

То что находится внутри ограничителей — это текст программы, интерпретируемый при запросе страницы. VBScript является языком по умолчанию, хотя возможно использование и JScript[источник не указан 1108 дней] (или любого другого языка, если установлен соответствующий интерпретатор):

Версии

ASP в своём развитии прошёл через несколько версий:

  • ASP 1.0 (распространяется с IIS 3.0) в декабре 1996 года.
  • ASP 2.0 (распространяется с IIS 4.0) в сентябре 1997 года.
  • ASP 3.0 (распространяется с IIS 5.0) в ноябре 2000 года.

Apache::ASP

Apache::ASP (англ.) предоставляет функциональность ASP на основе веб-сервера Apache, со скриптами на основе Perl.

ASP в Sambar Server

На сервере Sambar Server используется функциональность ASP, которая использует язык CScript в качестве основного языка программных вставок.

Обзор технологии Active Server Pages (ASP)

Сергей Верязов, Microsoft Special Interest Group «Neva»

Active Server Pages это среда программирования, которая обеспечивает возможность комбинирования HTML, скриптов и компонент для создания динамических Web-приложений. Возможность встраивания в Web-страницы скриптов (кода, написанного на языке программирования, например, VBScript или JScript) позволяет логичным образом объединить оформление с данными, полученными из различных источников, например, из БД.

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

Принципы функционирования

Использование Active Server Pages как бы не требует специфичных браузеров, но требует включения небезопасного ActiveX. Все ASP-скрипты запускаются и выполняются на Web-сервере, причем брaузер получает только результирующие HTML-файлы. Microsoft Internet Information Server, начиная с версии 3.0, поддерживает Active Server Pages.
Рассмотрим последовательность функционирования ASP. Клиент запрашивает ASP-страницу на Web-сервере. Сервер принимает запрос и начинает его обрабатывать. По расширению файла (.asp) определяет, что данный файл содержит ASP-скрипт, и начинает анализировать его содержимое, последовательно интерпретируя и выполняя вставки ASP-кода. ASP-код, в свою очередь, может содержать обращения к различным источникам данных, осуществлять обработку полученных данных и добавлять содержимое генерируемой страницы. В результате формируется обычная HTML-страница (уже не содержащая ASP-кода), которая и отправляется обратно клиенту.

Внешне ASP функционирует также, как CGI. Аналогичным образом передаются параметры (формат-строки запроса) и осуществляется вывод результатов. Однако производительность ASP оказывается гораздо выше, т. к. при каждом запросе не происходит отдельной загрузки ASP-интерпретатора. Использование компонент ActiveX также значительно повышает производительность Web-сервера.

Описание синтаксиса

ASP-код, который нужно выполнить на сервере, размещается внутри специальных тегов . Так как данный код обрабатывается на сервере, он не доступен пользователю. Сам код может быть написан с использованием Visual Basic Scripting Edition (VBScript) или JScript (JavaScript). Технология ASP позволяет использовать и другие языки программирования. По сути, нужно говорить не о синтаксисе ASP, а о том языке, который используется для написания ASP-кода. Синтаксис VBScript намного проще других языков, поэтому новичку будет легко в нем разобраться.

Объекты и компоненты

VBScript не является полнофункциональным языком программирования и использования встроенных в него средств явно недостаточно. Поэтому в ASP-страницах используются специальные объекты и компоненты ActiveX.

Существует набор встроенных объектов, которые инициализируются и предоставляются ASP-скрипту автоматически при начале обработки. Эти объекты обеспечивают доступ к основным жизненно важным функциям:

  • Объект Application позволяет создавать переменные, доступные всем пользователям Web-приложения.
  • Объект Session позволяет сохранять данные, связанные с отдельным пользователем.
  • Объект Request предоставляет параметры CGI-запроса, отправленные методом POST 99или GET.
  • Объект Response предоставляет методы для добавления информации, а также для формирования заголовков страницы ответа Web-сервера.
  • Объект Server содержит множество различных методов, одним из которых является метод CreateObject, позволяющий создавать экземпляры компонент ActiveX.

В отличие от встроенных ASP-объектов, ASP-компоненты явно необходимо создавать в коде скрипта. Существует огромное количество ActiveX-компонент, которые можно использовать в ASP-страницах, причем большинство из них распространяются бесплатно. Более того, разработчик может сам создавать ActiveX-компоненты в любой среде программирования, поддерживающей COM-технологию, например, Visual C++ или Visual Basic.

Следует уделить особое внимание объектам ADO (ActiveX Data Objects), которые представляют собой мощные интегрированные средства для создания приложений для работы с БД. Компоненты ADO обеспечивают быстрый и удобный интерфейс к БД на самом высоком уровне, при этом сохраняется переносимость разрабатываемых приложений для работы с другими БД. Использование компонент ADO значительно упрощает работу программиста, ему остается лишь правильно составить SQL-запросы к БД и позаботиться о выводе результатов.

В рамках функционирования Web-приложения существует возможность создания обработчиков основных событий, таких как запуск и остановка Web-приложения, а также открытие и закрытие пользовательской сессии. Эти события описываются в специальном ASP-файле global.asa. Обработчики данных событий можно использовать для инициализации объектов или установки значений глобальных переменных.

Средства разработки

Создавать ASP-страницы можно в любом текстовом редакторе, но это далеко не всегда удобно. Помимо написания кода на VBScript, необходимо осуществлять его отладку, что возможно только на функционирующем Web-сервере (IIS) и при наличии специальных средств.

Microsoft Visual InterDev 6.0 (входящий в состав Microsoft Visual Studio) является одним из лучших средств, которое позволяет не только быстро и эффективно создавать ASP-код, но и осуществлять расширенную отладку кода. Основные особенности этого продукта:

  • Просмотр списка используемых объектов, и возможность быстрого написания кода.
  • Подсветка синтаксиса кода (VBScript и JScript).
  • Автоматическое формирование содержимого global.asa.
  • При запуске в режиме отладки InterDev автоматически настраивает Web-сервер (IIS) в нужный режим, а по окончании отладки восстанавливает настройки.
  • Возможность установки точек прерывания (breakpoints).
  • Просмотр значений переменных (watches) и списка вызванных процедур (call stack).

Существуют также и другие специализированные редакторы, позволяющие разрабатывать ASP-приложения, например, Home Site 4.5, Macromedia UltraDev 4.0 или ASP Express. Однако эти средства не полностью охватывают возможности Visual InterDev.

Новые возможности в IIS 5.0

Последняя версия Web-сервера Internet Information Server (IIS) 5.0 значительно усовершенствована, благодаря чему повышена надежность и производительность ASP-приложений. Встроенные объекты ASP в Windows 2000 обладают новыми методами, которые расширяют возможности разработчика.
Появились новые средства обработки ошибок. С помощью нового объекта AppError теперь можно получать сведения об ошибках, происходящих как на стадии выполнения, так и на стадии разбора страницы.

В новой версии ядра управления сценариями Script Engine из состава Windows 2000 появились новые мощные средства поддержки языков VBScript и JScript. В сценариях на VBScript теперь можно пользоваться средствами проверки и разбора сложных выражений, а также создавать классы.
Средства доступа к данным также претерпели значительные изменения теперь в составе ОС поставляется ядро MDAC 2.5, которое, в частности, обеспечивает интеграцию со средствами XML.

Поддержка других языков программирования

Наравне с Visual Basic Scripting Edition (VBScript), IIS поддерживает обработку JScript (JavaScript). Вы можете использовать все те же объекты, при этом меняется только синтаксис связующих конструкций.
Преимущество технологии ASP в том, что она позволяет использовать и другие языки программирования. Для их поддержки необходимо установить соответствующие модули Script Engine. Например, поддержку языка Perl (а точнее ActivePerl) можно осуществить с помощью модуля от компании ActiveState (http://www.activestate.com/). Также существуют модули для поддержки REXX и Python.
Существуют продукты сторонних компаний, поддерживающие технологию ASP на других платформах. Например, Chili!Soft ASP, компании Chili!Soft, Inc., (http://www.chilisoft.com/) обеспечивает поддержку ASP на множестве Web-серверов, таких как: Apache, Lotus, Netscape, OReilly, которые могут функционировать под управлением различных ОС.

Достоинства и недостатки

Язык VBScript, обычно используемый в ASP, имеет менее удобный синтаксис, чем другие языки, например язык PHP. Однако основной недостаток VBScript — неприемлемо снижающаяся безопасность клиента, а в связке с ActiveX — практически нулевая. Не является компенсацией этого и то, что производительность интерпретатора VBScript значительно выше, чем PHP.

JScript от Microsoft лишен этого недостатка, но имеет другой, более серьёзный — неприятную обработку типов данных OLE Automation, что приводит к скрытым, трудным в обнаружении ошибкам.

ASP может использовать очень довольно набор классов для работы с SQL базами данных — ADO, который примерно аналогичен Perl DBI и лучше, чем вызовы mysql_xxx в PHP. Однако технология ADO тоже устарела.

ASP поддерживает объекты Session и Application, с которыми в PHP/Apache традиционно есть огромные сложности, связанные с архитектурой процессов Apache 1.x (а она восходит к нелюбви к потокам в мире UNIX и использованию fork() вместо них везде, где возможно).

Однако, так как объект Session ныне считается совершенно не удовлетворяющим требованиям безопасности, и зачастую вместо него все его содержимое помещают в один огромный cookie, и передают туда-обратно между клиентом и сервером. Такое легко реализуемо в PHP, этим пользуются, например, phpBB и его коммерческий дериватив vBulletin.

Трехуровневая клиент-серверная архитектура

Для решения этих проблем и была предложена так называемая 3-х уровневая архитектура клиент-сервер (рис.1.9). Основным ее отличием от архитектуры 2.5 является физическоеразделение программ, отвечающих за хранение данных (СУБД) от обрабатывающих эти данные программ (сервер приложения (СП). Такое разделение программных компонент позволяет оптимизировать нагрузки как на сетевое, так и на вычислительное оборудование комплекса.

Рисунок 1.9 – Схема трехуровневой архитектуры ИС

Компоненты трехуровневой архитектуры, с точки зрения программного обеспечения реализуют определенные серверы БД, web-серверы и браузеры. Место любого из этих компонентов может занять программное обеспечение любого производителя. Модель сервера приложений показана на рис.1.10.

Ниже представлено описание взаимодействия компонентов трехуровневой архитектуры клиент-серверного приложения. Сервер БД представлен MySQL-сервером; сервер приложений технологиями: ADO.NET, ASP.NET и web-сервером IIS; роль клиента выполняет любой web-браузер.

Схематично работу системы можно представить в виде последовательности: Браузер клиента1-> Сервер IIS2-> Исполняющая среда ASP.NET 2.03-> Провайдер данных ADO.NET 2.04-> Сервер MySQL5-> Провайдер данных ADO.NET 2.06-> Исполняющая среда ASP.NET 2.07-> Сервер IIS8-> Браузер клиента.

Более детально функционирование системы происходит следующим образом.

1 — браузер клиента отправляет HTTP-запрос;

2 — на стороне сервера служба Web Internet Information Server (web-сервер IIS) определяет тип запрашиваемого ресурса, и для случая запроса *.aspx (расширение файлов страниц ASP.NET) загружает соответствующее ему (запросу) расширение Internet Server Aplication Programming Interface (ISAPI). Для страниц aspx это расширение isapi_aspnet.dll. IIS также осуществляет идентификацию и авторизацию пользователя от которого поступил запрос. В свою очередь расширение isapi_aspnet.dll загружает фабрику обработчиков ASP.NET. Далее, фабрика обработчиков создает объектную модель запрашиваемой страницы и обрабатывает действия пользователя.

3 — в ходе генерации ответа приложению ASP.NET может потребоваться обращение к БД, в этом случае используя библиотеки классов провайдера данных ADO.NET 2.0, выполняющая среда обращается к серверу БД;

4 — провайдер данных ADO.NET 2.0 передает запрос на операцию с БД серверу MySQL;

Рис.1.10 – Модель сервера приложений трехуровневой ИС

5 — сервер MySQL осуществляет обработку запроса, выполняя соответствующие операции с БД;

6 — провайдер данных ADO.NET 2.0 передает результаты запроса объекту страницы;

7 — объект страницы с учетом полученных данных осуществляет визуализацию (рендеринг) графического интерфейса страницы и направляет результаты в выходной поток;

8 — сервер IIS отправляет содержимое сгенерированной страницы клиентскому браузеру.

Преимуществом трехуровневой архитектуры является:

1. Меньшая нагрузка на клиентское приложение («Тонкий клиент»).

2. Между клиентской программой и сервером приложения передается лишь минимально необходимый поток данных — аргументы вызываемых функций и возвращаемые от них значения. Это теоретический предел эффективности использования линий связи, даже работа с ANSI-терминалами (не говоря уже об использование протокола http) требует большей нагрузки на сеть.

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

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

5. Снижение нагрузки на сервер данных по сравнению с 2.5-слойной схемой, а значит и повышение скорости работы системы в целом.

6. Дешевле наращивать функциональность и обновлять ПО.

К недостаткам архитектуры можно отнести более высокие расходы на администрирование и обслуживание серверной части.

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

Важным фактором в трехуровневой архитектуре является возможность расширение ее функциональной наполненности. Для расширения функциональности не обязательно менять всюсистему как в случае 2.5-уровневой архитектуры, а достаточно установить новый сервер приложения с требуемой функцией. Отпадают и многие проблемы связанные с переустановкой клиентских частей программы на множестве компьютеров, быть может весьма удаленных, столь актуальные для 2-уровневой схемы — парадигма «тонкого» клиента предоставляет для этого целый ряд возможностей.

Дата добавления: 2020-02-09 ; просмотров: 8611 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Технология Клиент-сервер 3 (стр. 6 из 7)

Помимо клиентов-браузеров бывают и другие клиенты, например, клиенты электронной почты (Outlook Express, Netscape Messenger, The Bat, Pegasus Mail, Pine, Eudora и другие.), клиенты для приема и передачи файлов (ftp-клиенты), telnet-клиенты, которые необходимы для интерактивной работы на удаленном узле (простейший telnet-клиент — программа telnet.exe) и многие другие.

Программы-серверы также разнообразны: web – сервер, DNS – сервер, ftp-сервер (для передачи файлов), сервер приложений (для удаленной работы с приложениями), сервер электронной почты и другие.

Технология «Клиент – сервер» для Internet организована следующим образом (рисунок 55):

— клиент формирует и посылает запрос на сервер;

Передачу с сервера на рабочую станцию документов и других объектов по запросам, поступающим от браузера, обеспечивает функционирующая на сервере программа, называемая web-сервером. Когда web-браузеру необходимо получить документы или другие объекты от Web-сервера, он отправляет серверу соответствующий запрос. При достаточных правах доступа между сервером и навигатором устанавливается логическое соединение.

— сервер производит необходимые манипуляции с данными, формирует результат и передаёт его клиенту;

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

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

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

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

Цикл повторяется, пока пользователь не закончит работу с сервером.

Риунок 55 — Технология «Клиент – сервер» для Internet

В сервисе WWW для передачи информации применяется протокол НТТР, при работе которого сервер не имеет никакой информации о состоянии браузера. При этом взаимодействовать с сервером возможно только через механизм URL, это создает некоторые трудности при реализации клиентской части. Схема передачи информации по протоколу НТТР состоит из следующих этапов (рисунок 56):

— браузер преобразует доменное имя из URL в IP-адрес и устанавливает соединение с сервером;

— браузер передает остальную часть URL на сервер;

— сервер определяет по URL путь и имя файла, при необходимости формирует его динамически;

— сервер пересылает файл браузеру;

— сервер разрывает соединение;

— браузер отображает документ.

Существует множество технологий и языков программирования для написания серверных и клиентских Internet – приложений. В настоящее время большое распространение получила технология Java, с помощью которой можно строить универсальные системы со смешанной архитектурой, приложения, выполняемые на стороне клиента, называются апплетами (applets), на стороне сервера — сервлетами (servlets). Достаточно большой популярностью пользуется Flash-технология, в рамках которой можно создавать медиа-насыщенные интерактивные ресурсы, основная рабочая нагрузка при этом ложится на компьютер пользователя.

Рисунок 56. — Схема работы по HTTP в архитектуре «Клиент-сервер» для Internet

С помощью CGI (Common Gateway Interface) приложений возможно взаимодействие с любыми базами данных через формирование SQL запросов, или другие механизмы; также возможна реализация счетчиков посещений, гостевых книг и других расширений. CGI реализуется через скрипты на любом из языков программирования высокого уровня (наиболее часто используют С++, Perl, VisualBasic, Pascal, Java).

Server Sides Includes (SSI/SSI+) — технология динамического формирования документов (в том числе и работы с БД). Скрипт (точнее серверные инструкции) находится в HTML файле обычно имеющем расширение sht или shtm, при этом серверные инструкции размещаются между специальными разделителями (tokens), а сами инструкции записаны на языке Сscript, хотя это в большей степени зависит собственно от сервера. При пересылке такой файл сканируется сервером на наличие SSI инструкций и результат динамически подставляется в посылаемый документ. SSI реализуется через специальные компоненты (динамические библиотеки), которые входят в состав сервера. По аналогичному принципу организована работа со скриптами на языке PHP, в этом случае, программные конструкции включаются в HTML с помощью разделителей .

Схожей по технике формирования динамических страниц является технология Active Server Pages (ASP) от Microsoft. Данная технология опирается на использование разнообразных объектов и компонент (COM, ActiveX и тому подобное), работа с которыми ведётся средствами языков VBScript или JavaScript.

Internet Server Application Programming Interface (ISAPI), реализуется через механизм DLL. C помощью ISAPI Internet connector возможно взаимодействие с базами данных (SQL Server, Oracle, RBase, Access, Paradox, dBASE) через драйверы Open Database Connectivity (ODBC), также возможна реализация других расширенных функций (создание различных фильтров запросов). Основным средством разработки приложений является Microsoft Visual C++ (The Internet Server API Extension Wizard). Данный механизм поддерживается Microsoft Internet Information Server (MS IIS).

Также нашли свое применение JavaScript, VBScript, SGML, HTML, XML и другие языки, ориентированные на описание структур документов.

3 .7 Технология «Клиент-сервер» применительно к Intranet

Для реализации всех достоинств глобальной сети в пределах сети организации, при этом обеспечивая секретность внутренней информации разработали Intranet.

Intranet — частная компьютерная сеть, являющаяся внутренней web-системой, локализованной в пределах одной организации, в которой используются стандарты и протоколы Internet (сервисы Web, TCP/IP, http, протоколы связи и HTML – страницы). Другими словами, Intranet – это частная, защищенная внутрикорпоративная сеть, при построении которой используются технологии Internet, доступная только сотрудникам организации, причем независимо от их физического местонахождения, ведь для доступа в Intranet сети используется Internet как транспорт

Термин «Intranet» впервые появился 19 апреля 1995 году в журнале Digital News & Review.

Для преобразования локальной или региональной компьютерной сети в Intranet не потребуется распродавать старое оборудование, можно обойтись уже существующими ресурсами.

Архитектура Intranet основана на архитектуре «Клиент-сервер» (рисунок 57).

В качестве клиентских программ используются браузеры. При изменениях функциональности корпоративной информационной системы обновление клиентского ПО не требуется. Web-сервер выступает в качестве сервера приложений. Клиент и сервер взаимодействуют обычно по локальной сети, где есть выход в Internet через брандмауэр. Брандмауэром (firewall) – это компьютер с установленным на нем специальном программным обеспечением, позволяющим:


— идентифицировать любого входящего извне пользователя, чтобы запретить или разрешить ему доступ;

— аудит и протоколирование вхождений — запись, кто, когда и зачем входил во внутреннюю сеть;

— криптографию — шифрование секретной информации.

— экранирование — возможность односторонней передачи данных.

Рисунок 56 – Простейшая схема Intranet с архитектурой «Клиент – сервер»

Наличие диалоговых свойств в HTML и интерфейса CGI позволяет строить Internet-приложения с доступом к БД. Наиболее распространена схема динамической публикации отчетов. При этом в качестве CGI-процедуры используется параметризуемый генератор отчетов. Однако это не единственная схема, возможно применять программы ввода и обновления информации в БД.

Если используются традиционные статичные страницы гипертекста, то в ответ на запрос клиента Web-сервер передает страницу в формате HTML. При работе с базой данных клиент указывает в форме программу или сценарий для запуска на сервере. Серверная процедура получает введенные пользователем данные, формирует и передает SQL-запрос (определяющий логику управления данными) и, возможно, данные к СУБД. Сервер БД по запросу выполняет обновление, вставку, удаление или выборку записей из БД. CGI-процедура преобразует полученные результаты в формат HTML или в формат диалоговых переменных. Затем Web-сервер посылает полученную HTML-cтраницу или значения диалоговых переменных браузеру для отображения.

Использование CGI-процедур имеет ряд недостатков – статичное представление информации, преобразование результата-отчета в HTML-файл, отсутствие динамического просмотра изменения информации в базе данных, процедура «не помнит состояний запросов» – каждое обращение к БД требует повторного установления соединения. Кроме того, такой принцип работы перегружает коммуникационную среду и имеет системные издержки при запуске серверных процессов.

Для устранения недостатков CGI используют возможности специальных API для Web-серверов и включают дополнительное «релейное» звено в архитектуру. Все это только подталкивает к дальнейшему совершенствования архитектуры «Клиент-сервер».

Лекция 1. Что такое ASP.NET. Инсталляция и тестовый проект.

Введение

Microsoft .NET Framework — это платформа для создания, развертывания и запуска Web-сервисов и приложений. Она предоставляет высокопроизводительную, основанную на стандартах, многоязыковую среду, которая позволяет интегрировать существующие приложения с приложениями и сервисами следующего поколения, а также решать задачи развертывания и использования интернет-приложений. .NET Framework состоит из трех основных частей — общеязыковой среды выполнения (common language runtime), иерархического множества унифицированных библиотек классов и компонентной версии ASP, называемую ASP.NET.

ASP.NET – это часть технологии .NET, используемая для написания мощных клиент-серверных интернет приложений. Она позволяет создавать динамические страницы HTML. ASP.NET возникла в результате объединения более старой технологии ASP (активные серверные страницы) и .NET Framework. Она содержит множество готовых элементов управления, используя которые можно быстро создавать интерактивные web-сайты. Вы также можете использовать сервисы, предоставляемые другими сайтами, прозрачно для пользователей вашего сайта. В общем, возможности ASP.NET ограничены только вашим воображением.

Давайте обсудим, что такое динамические страницы HTML и чем они отличаются от статических. Статическая страница содержит код на языке гипертекстовой разметки HTML. Когда автор страницы пишет ее, он определяет, как будет выглядеть страница для всех пользователей страницы. Содержание страницы будет всегда одинаковым независимо от того, кто и когда решит ее просмотреть. Языка HTML вполне достаточно для отображения информации, которая редко изменяется и не зависит от того, кто ее просматривает. Страница HTML — простой ASCII-текст, следовательно, клиент может работать в любой операционной системе.

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

Но что, если мы хотим отобразить на странице текущий курс евро или прогноз погоды? Если мы написали страницу HTML вчера, сегодня она уже устареет. Следовательно, мы должны уметь создавать динамические страницы. Динамическое наполнение страницы – это информация, содержание которой определяется тем, кому она предназначена, и которая отличается от просмотра к просмотру. Оно позволяет обеспечить двусторонний обмен информацией – от клиента к серверу и обратно.

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

Большинство страниц на ранних стадиях развития интернета были статическими. Последние 10 лет растет количество динамических страниц. И это понятно, пользователи интернет хотят не только читать готовую информацию, а быть активными действующими лицами. Например, они заказывают товары в интернет-магазине, пишут дневники, участвуют в конкурсах. Информационные порталы обновляют новости каждую минуту. Динамические страницы могут подстраиваться под конкретного пользователя, а также реагировать на его действия в браузере. Каким же образом? Для этого придумано множество технологий. Например, того, чтобы идентифицировать пользователя и сохранить его настройки для данного сайта, применяются файлы-cookies.

Существуют языки, способные динамически изменять содержимое веб-страницы. С одной стороны, это языки скриптов, выполняющиеся непосредственно у клиента. Примеры скриптовых языков — JavaScript и VBScript. Скрипты на этих языках встроены в код HTML, который сервер посылает браузеру. Сценарии, выполняемые на стороне клиента, выделяются тегами и . Браузер интерпретирует этот код и показывает пользователю результат. Сам код можно просмотреть через View Source браузера. Естественно, эти программы не могут быть большими. Например, если нужно выполнить поиск в базе данных, мы не может отправить пользователю все ее содержимое. Но скрипты могут проверить правильность запроса, введенного в форму, тогда не придется перезагружать сервер обработкой неправильных запросов. Некоторые программисты создают на JavaScript анимационные эффекты. Одна студентка intuit.ru желала найти скрипт, который бы отправлял SMS-сообщения. Увы, это невозможно. Выполняемых на стороне клиента сценариев недостаточно для создания полноценных динамических страниц. Даже если на странице используется JavaScript, анимированные картинки .gif, она называется статической.

Динамическая веб-странице должна быть создана «на лету» программой, исполняющейся на интернет-сервере. Широко применяются механизм шлюзов CGI(Common Gateway Interface). Вначале пользователь получает статическую страницу с формой. Вам известно, что в теге FORM существует атрибут ACTION. Именно он задает адрес (URL) исполняемого приложения. На сервере находятся исполняемые файлы программ, написанных, например на C/С++ или Дельфи, которые по протоколу HTTP принимают данные из входного потока или из переменных окружения и записывают в стандартный выходной поток готовую страницу.

Пользователю в ответ на запрос посылается HTML код, который был специально сгенерирован для него. Это может быть, например, результат поиска в поисковой системе. CGI -скрипты могут быть написаны на интерпретируемом языке (Perl) или даже скрипте командной строки. Входной и выходной потоки переназначаются. На вход интернет-сервер принимает данные, введенные пользователем. После обработки полученных данных, пользователю возвращается результирующая страница. При исполнении cgi-программа загружается в память сервера, а при завершении – удаляется. Когда 100 клиентов одновременно обращаются к серверу, в памяти создаются 100 процессов, для размещения кода каждого из которых нужна память. Это отрицательно сказывается на масштабируемости. Напомним, что масштабируемость — это возможность плавного роста времени ответа программной системы на запрос с ростом числа одновременно работающих пользователей.

Для решения это проблемы Microsoft была предложена альтернатива – ISAPI(Internet Server Application Programming Interface)-расширения и фильтры. Вместо исполняемых файлов используются DLL – библиотеки. Код DLL находится в памяти все время и для каждого запроса создает не процессы, а нити исполнения. Все нити используют один и тот же программный код. ISAPI –приложение выполняется в процессе IIS-сервера. Это позволяет повысить производительность и масштабируемость.

ISAPI-расширения можно создавать в Visual Studio C++ 6.0, пользуясь мастером.

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

Скриптовые языки, исполняющиеся на стороне сервера – php и asp. Технология asp была разработана Microsoft в 90-х годах.

Выполнение кода asp поддерживается ISAPI-расширением сервера. В диалоге конфигурации сервера IIS определяются способы обработки файлов с различными расширениями. Для обработки URL-адреса с расширением в установках сервера определен файл asp.dll. Файлы asp отправляются к нему на обработку. На вход поступает asp, а на выходе имеем поток HTML-кода.

Пример файла asp:

Тег сигнализирует asp, что в нем находится код, который он должен обрабатывать на сервере. Выполняется скрипт на языке, который указан в директиве Language. Оператор Response.Write записывает текст в выходной поток сервера, таким образом, он становится частью HTML-страницы, отправленной пользователю.

Технология asp была ограничена по своим возможностям. Он использовал скриптовые языки, которые имеют меньше возможностей, чем полнофункциональные языки программирования. Код asp был встроен в HTML в виде специальных тегов, что создавало путаницу. Кусочки asp были разбросаны по нему, как изюм в булке. Но HTML код обычно создают дизайнеры, которые умеют «делать красиво», а asp – программисты, которые заставляют все это работать. В ASP.NET вы можете держать код asp и HTML в разных файлах.

Скриптовые языки не поддерживают строгую типизацию. Что это значит? Вы можете не описывать переменную до ее использования и можете присваивать ей значения разных типов. Это удобно, но создает почву для ошибок. Например, у вас есть переменная x1, и вы присваиваете ей значение 1, но вы сделали опечатку и по ошибке написали x2=1. Будет создана новая переменная x2, а значение x1 не изменится. В языке со строгой типизацией компилятор заметит, что переменная x2 не описывалась, и выдаст ошибку.

В 2000 году на конференции разработчиков в качестве части новой технологии .NET Microsoft представила ASP+. С выходом .NET Framework 1.0 она стала называться ASP.NET.

ASP.NET — это не продолжение ASP. Это концептуально новая технология Microsoft, созданная в рамках идеологии .NET. В ASP.NET заложено все, для того, чтобы сделать весь цикл разработки веб-приложения более быстрым, а поддержку более простой. ASP.NET основана на объектно-ориентированной технологии, но сохранила модель разработки asp: вы создаете программу и помещаете ее в директорию, выделенную сервером, и она будет работать. В ASP.NET появилось много новых функций, а существовавшие в asp значительно усовершенствованы.

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

Компиляция происходит на сервере в момент первого обращения пользователя к странице. Если программист изменил текст страницы, программа перекомпилируется автоматически. При написании кода можно использовать набор компонентов, поставляемых с .NET.

Платформа .NET Framework предоставляет приложениям среду выполнения, сама непосредственно взаимодействуя с операционной системой. Выше лежит интерфейс ASP.NET приложений, на котором в свою очередь базируются веб-формы (ASP.NET страницы) и веб-сервисы. Интерфейс .NET Framework позволяет стандартизировать обращение к системным вызовам и предоставляет среду для более быстрой и удобной разработки. CLR обеспечивает единый набор сервисов для всех языков.

ASP.NET использует технологию доступа к данным ADO.NET, которая обеспечивает единый интерфейс для доступа к базам данных SQL Server и файлам XML. Кроме того, усиленная модель безопасности позволяет обеспечивать защиту клиента и сервера от несанкционированного доступа.

В 2004 году появилась версия ASP.NET 2.0(бета-версия, окончательный выход – конец 2005-начало 2006). Как утверждается, эта версия позволяет сократить объем кодирования на 70%. Новые возможности версии 2.0 – например, использование шаблонов дизайна страниц(Master Page), упрощенная локализация Web-приложений, более 50 новых серверных элементов управления. Цели, которые преследовали разработчики новой версии – повысить скорость разработки сайтов, масштабируемость, легкость поддержки и администрирования сайтов, скорость работы сервера. Появилась панель остнастки MMC (консоль управления Microsoft), предоставляющая графический интерфейс для управления настройками ASP.NET. Изменять настройки проекта теперь можно и через web-интерфейс. ASP.NET 2.0 поддерживает работу на 64-битных процессорах. Сервис персонализации (personalization) предоставляет готовое решение для хранения персональных данных, непосредственно характеризующих пользователя сайта, так называемого профиля пользователя (Profile).

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

Предыдущие версии Visual Studio для проектов ASP.NET требовали наличия на машине разработчика сервера IIS. Теперь сервер встроен в среду разработки.

ASP.NET 2.0 и Visual Studio 2005 предоставляют инструменты для легкого построения локализируемых сайтов, которые определяют предпочитаемый язык пользователя и посылают ему страницы на его языке.

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

В ASP.NET 2.0 встроена технология автоматического обновления кэширования баз данных. Данные, полученные из базы, хранятся на сервере и он не обращается к базе для обработки повторного запроса. При изменении базы данных кэш обновляет свое содержимое.

ASP.NET — это технология, а не язык, и позволяет программировать на разных языках – С#, Visual Basic, J#. В платформе .NET все языки равны, но некоторые равнее(Дж. Оруэлл). Вот таким языком и является С#, потому что он был специально создан для этой платформы. Программирование C# позволяет в полной мере использовать концепции, методы и паттерны объектно-ориентированной разработки. Язык Visual Basic 8.0 наделен почти теми же возможностями. Чтобы научиться ASP.NET, вам нужно знать основы HTML, а знание asp не обязательно. Оно может даже помешать, так как придется менять образ мышления. Также для понимания многих желательно знать CSS и JavaScript.

Процесс инсталляции

ASP .NET 2.0 можно установить на компьютерах с ОС Windows 2000 с Service Pack 4, Windows XP с Service Pack 2 и более поздними версиями Windows. Готовые сайты предпочтительно устанавливать на Windows Server 2003.

Для разработки приложения можно использовать любую среду разработки или даже текстовый редактор, при условии, что у вас есть доступ к IIS. Если же вы хотите воспользоваться всей мощью Microsoft .NET Framework и ASP.NET и при этом, затратить как можно меньше усилий, то нужно воспользоваться средой разработки, специально разработанной для программирования ASP.NET 2.0.

Если вы приобретете Visual Studio .NET 2005, то для работы достаточно будет только его. .NET Framework содержится на дисках. В его состав входит Visual Web Developer, который позволяет создавать профессиональные веб-приложения, а также desktop-приложения на разных языках программирования. Продукты Microsoft выпускаются на DVD, но есть набор из двух CD от «Мегасофт». Visual Studio .NET 2005 требует около 2 Гигабайт дискового пространства. При этом инсталлируется ASP.NET 2.0, среда разработки, SQL Server Express, встроенный веб-сервер, Crystal Reports со специальными элементами управления для ASP.NET 2.0.
Бесплатно распространяемое программное обеспечение.

Visual Web Developer 2005 Express Edition – свободно распространяемая среда предназначенный для новичков и студентов, доступная по адресу http://msdn.microsoft.com/vstudio/express/vwd/. Список отличий VWD от Visual Studio.NET 2005 невелик и для начинающих несущественен, он приведен здесь: http://msdn.microsoft.com/vstudio/products/compare/default.aspx

Инсталлятор VWD имеет объем 2,8 Мб, но в процессе инсталляции он загрузит еще 40 Мб и 80 Мб, если захотите установить документацию. При этом также будет установлен .NET Framework с ASP.NET 2.0.

Системные требования – процессор с минимальной скоростью 600 МГц, 128 МБ памяти и 1.3 ГБ дискового пространства. После инсталляции нужно будет зарегистрировать свою установку, это совершенно бесплатно.

В качестве среды разработки вы можете выбрать WebMatrix. Эта программа совмещает в себе редактор и http-сервер. Ее можно загрузить на http://www.asp.net/WebMatrix.

У WebMatrix инсталлятор размером всего 1.2 Мб, но у него меньше возможностей, чем у VWD. Но, в общем, эти среды разработки похожи. У WebMatrix есть неприятная особенность – она дает запрос на сохранение во время закрытия файлов, которые не редактировались. VWD Express позволяет одним нажатием кнопки открыть Web-интерфейс конфигурирования проекта. В VWD работает технология IntelliSense, которая автоматически предлагает возможные в данном месте элементы кода.

Если вы решили работать с WebMatrix, вы должны установить на своей машине .NET Framework 2.0 и ASP.NET 2.0.

Если у вас операционная система Windows Server 2003, то .NET Framework уже предустановлен. Вы можете проверить, есть ли вас директория %WINSDIR%Microsoft.NETFramework. Если нет, вы можете ее загрузить на сайте Microsoft. Последние версии находятся по адресу http://msdn.microsoft.com/netframework/downloads/updates

На данный момент это .NET Framework 2.0, но к моменту, когда вы будете читать эту лекцию, могут появиться более новые версии. Вы можете скачать новую версию, даже если у вас уже есть другая. Они будут существовать на компьютере одновременно в поддиректориях %WINSDIR%Microsoft.NETFramework, с именем, соответствующим номеру версии. Можно сказать, что каждая версия представляет собой сборку. Система версий поддерживается для всех приложений, созданных с использованием .NET Framework.

Там вы увидите ссылки на .NET Framework для разных архитектур компьютера.

При желании загрузите .NET Framework Version 2.0 SDK, которая содержит наряду с .NET Framework Version 2.0 SDK документацию и примеры, которые могут оказаться полезными.

По адресу http://asp.net/default.aspx можно найти много полезных для разработчиков программных продуктов, примеров кода и статей.

IIS(Internet Information Server) находится на инсталляционном диске Windows 2000/XP, но предустановлен только на серверах. Его можно установить, зайдя в Control Panel->Add or Remove Programs->Add/Remove Windows Components. Компьютер попросит вас вставить инсталляционный диск.

IIS может понадобиться, если вам нужен полноценный сервер для работы в интернет, а не просто на своем компьютере или в локальной сети или вы решили набирать текст в обычном редакторе. Для работы на своем компьютере во все эти среды разработки встроен сервер Cassini, который первоначально появился как часть WebMatrix. Символ WebMatrix – планета Сатурн, а Кассини — известный исследователь Сатурна. Предыдущие версии Visual Studio требовали наличия IIS, но теперь Cassini встроен и в Visual Studio 2005, что позволяет работать даже в Windows XP Home Edition.

Примеры будут даваться как для WebMatrix, так и Visual Studio. Некоторые примеры требуют VWD Express или Visual Studio.
Сообщества разработчиков.

Через меню помощи Visual Web Developer Express можно зайти на сайты форума по ASP.NET. А вот адреса сайтов на русском языке:

* http://www.aspnetmania.com
* http://www.gotdotnet.ru/
* http://www.sql.ru/
* http://dotsite.ru/
* http://www.rsdn.ru/

Вы можете завести пробный хостинг на http://europe.webmatrixhosting.net/russia/default.aspx.

Первый проект

Вначале решите, в какой директории будете создавать страницы. Все файлы, находящиеся в одной директории, считаются единым проектом.Запустите выбранную вами среду разработки. Выберите пункт меню File-New-Website. Появится диалоговое окно. Назначьте в нем имя проекта и выберите язык программирования С#.

По умолчанию проект создается в файловой системе. По желанию его можно создать на HTTP или FTP-сервере. Из файловой системы проект всегда можно скопировать на сервер нажатием одной кнопки в заголовке Solution Explorer.

В проекте будет создана страница default.aspx. Выберите ее, и появится окно редактирования с закладками Design и Source. Не меняя ничего, щелкните на кнопке со стрелкой, чтобы просмотреть страницу в браузере. Появится окно, котором спрашивается, нужно ли добавить в файл web.config возможность отладки. Нажмите OK. На панели задач должен появиться значок веб-сервера. Откроется браузер, показывающий страницу по адресу http://localhost:номерпорта/Website1/default.aspx. localhost обозначает сервер, работающий на вашем компьютере. Встроенный сервер Cassini сам назначает себе номер порта – для каждого проекта он разный. Сервер IIS обычно работает через порт 80(или 8080, если тот занят), и для него номер порта указывать не нужно. При этом ваша страница будет скомпилирована.

Пока что страница в бразере пустая.

Но исходный код этой страницы не пустой. Программа сгенерировала код для вас.

Асинхронные TCP-сокеты как альтернатива WCF

Продукты и технологии:

Visual Studio 2012, Microsoft .NET Framework 4.5, C#

В статье рассматриваются:

  • подготовка сервиса на основе TCP-сокета;
  • создание демонстрационного клиентского приложения Windows Forms;
  • создание демонстрационного клиентского веб-приложения;

В среде технологий Microsoft применение Windows Communication Foundation (WCF) является распространенным подходом при создании клиент-серверной системы. Конечно, есть много альтернатив WCF, каждая со своими плюсами и минусами, например HTTP Web Services, Web API, DCOM, веб-технологии AJAX, программирование именованных каналов и исходных TCP-сокетов. Но, если учесть такие факторы, как усилия в разработке, управляемость, масштабируемость, производительность и безопасность, во многих ситуациях использование WCF оказывается самым эффективным подходом.

Однако использование WCF может быть крайне сложным и оказаться совершенно излишним в некоторых сценариях программирования. До выпуска Microsoft .NET Framework 4.5 программирование асинхронных сокетов в большинстве случаев было, по моему мнению, слишком трудным, чтобы оправдать усилия на него. Но легкость применения новых языковых средств await и async в C# меняет баланс, поэтому программирование сокетов для асинхронных клиент-серверных систем теперь является более привлекательным вариантом, чем раньше. В этой статье поясняется, как использовать эти новые асинхронные средства .NET Framework 4.5 для создания низкоуровневых, высокопроизводительных асинхронных клиент-серверных программных систем.

Лучший способ понять, куда я клоню, — взглянуть на демонстрационную клиент-серверную систему, показанную на рис. 1. В верхней части иллюстрации представлена командная оболочка, выполняющая сервис на основе асинхронного TCP-сокета, который принимает запросы на вычисление среднего или минимального значения из набора чисел. В середине изображено окно приложения Windows Forms (WinForm), которое посылает запрос на вычисление среднего в (3, 1, 8). Заметьте, что клиент асинхронный: после отправки запроса в процессе ожидания ответа от сервиса пользователь может успеть трижды щелкнуть кнопку с меткой «Say Hello», и приложение остается отзывчивым.

Рис. 1. Демонстрационный сервис на основе TCP с двумя клиентами

В нижней части рис. 1 показано клиентское веб-приложение в действии. Клиент отправил асинхронный запрос, чтобы найти минимальное значение в (5, 2, 7, 4). Хотя это не очевидно на экранном снимке, пока веб-приложение ожидает ответ от сервиса, оно остается отзывчивым на пользовательский ввод.

В следующих разделах я продемонстрирую, как кодировать сервис, клиент WinForm и клиентское веб-приложение. Попутно мы обсудим все за и против использования сокетов. В этой статье предполагается, что вы по крайней мере на среднем уровне владеете навыками программирования на C#, но глубокого понимания или существенного опыта асинхронного программирования от вас не требуется. К данной статье можно скачать полный пакет исходного кода для всех трех программ, представленных на рис. 1. Большая часть обычной обработки ошибок убрана для большей ясности основных идей.

Создание сервиса

Общая структура демонстрационного сервиса с небольшой правкой для экономии места приведена на рис. 2. Чтобы создать этот сервис, я запустил Visual Studio 2012, в которой есть нужный .NET Framework 4.5, и создал новое консольное приложение на C# с именем DemoService. Поскольку сервисы на основе сокетов обычно имеют специфическую, ограниченную функциональность, на практике желательно присваивать им более описательные названия.

Рис. 2. Структура демонстрационного сервиса

После загрузки кода шаблона в редактор я модифицировал выражения using в начале исходного кода, чтобы включить System.Net и System.Net.Sockets. В окне Solution Explorer я переименовал файл Program.cs в ServiceProgram.cs, и Visual Studio автоматически переименовал класс Program за меня. Запустить сервис легко:

Каждый пользовательский сервис на основе сокета, размещенный на сервере, должен работать с уникальным портом. Обычно для пользовательских сервисов выделяются номера портов 49152–65535. Избежать конфликтов с номерами портов может оказаться совсем не просто. Вы можете зарезервировать номера портов на сервере, используя параметр системного реестра ReservedPorts. Сервис использует парадигму объектно-ориентированного программирования (ООП), и его экземпляр создается через конструктор, который принимает номер порта. Поскольку номера портов для сервисов фиксированы, номер порта можно «зашить» в код, не передавая его в качестве параметра. Метод Run содержит цикл while, который принимает и обрабатывает клиентские запросы, пока консольная оболочка не получит нажатия клавиши .

Каждый пользовательский сервис на основе сокета, размещенный на сервере, должен работать с уникальным портом.

Класс AsyncService содержит два закрытых члена: ipAddress и port. Эти два значения фактически определяют сокет. Конструктор принимает номер порта и программным способом определяет IP-адрес сервера. Открытый метод Run выполняет всю работу по приему запросов, расчетам и отправке ответов. Метод Run вызывает вспомогательный метод Process, а тот — вспомогательный метод Response. Метод Response вызывает вспомогательные методы Average и Minimum.

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

Конструктор сервиса и методы Run

Два открытых метода демонстрационного сервиса на основе сокета показаны на рис. 3. Сохранив имя порта, конструктор использует метод GetHostName, чтобы узнать имя сервера, а затем получить структуру, которая содержит информацию о сервере. В наборе AddressList хранятся различные адреса машины, в том числе адреса по IPv4 и IPv6. Перечислимое значение InterNetwork указывает IPv4-адрес.

Рис. 3. Конструктор сервиса и методы Run

Этот подход ограничивает сервер прослушиванием запросов только по первому назначенному ему IPv4-адресу. Более простой альтернативой могло бы быть разрешение серверу принимать запросы по любому из его адресов, присвоив this.ipAddress = IPAddress.Any.

Заметьте, что в сигнатуре метода Run сервиса используется модификатор async, указывая, что в теле этого метода будет вызываться какой-то асинхронный метод в сочетании с ключевым словом await. Этот метод возвращает void, а не более привычный Task, поскольку Run вызывается методом Main, который в качестве особого случая не разрешает использования модификатора async. Альтернатива — определить метод Run так, чтобы он возвращал тип Task, а затем вызывал метод как service.Run().Wait.

Метод Run сервиса создает экземпляр объекта TcpListener, используя IP-адрес и номер порта сервера. Метод Start слушателя начинает отслеживать указанный порт, ожидая запрос на соединение.

В основном цикле обработки while создается объект TcpClient, который можно считать интеллектуальным сокетом, и он ждет соединения через метод AcceptTcpClientAsync. До появления .NET Framework 4.5 вам пришлось бы использовать BeginAcceptTcpClient, а затем писать собственный код для координации асинхронных операций, что, поверьте мне, совсем не просто. В .NET Framework 4.5 добавлено много новых методов, имена которых, по соглашению, заканчиваются на «Async». Эти новые методы в сочетании с ключевыми словами async и await резко упрощают асинхронное программирование.

Метод Run вызывает метод Process, используя два выражения. Альтернатива этому — использовать сокращенный синтаксис и вызывать метод Process одним выражением: await Process(tcpClient).

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

Итак, сервис использует объекты TcpListener и TcpClient, чтобы скрыть сложность программирования низкоуровневых сокетов, а с помощью нового метода AcceptTcpClientAsync в сочетании с новыми ключевыми словами async и await скрывает и сложность асинхронного программирования. Метод Run настраивает и координирует операции соединения, вызывает метод Process для обработки запросов, а затем использует второе выражение для ожидания возвращаемого Task.

Методы Process и Response сервиса

Эти методы объекта сервиса представлены на рис. 4. В сигнатуре метода Process используется модификатор async и возвращаемый тип Task.

Рис. 4. Методы Process и Response демонстрационного сервиса

Одно из преимуществ применения низкоуровневых сокетов вместо Windows Communication Foundation (WCF) заключается в том, что можно легко вставлять диагностические выражения WriteLine в любой точке кода. В демонстрационной программе я заменил clientEndPoint фальшивым IP-адресом 123.45.678.999 из соображений безопасности.

Три основные строки кода в методе Process:

Вы можете интерпретировать первое выражение как «асинхронно считать строку запроса, при необходимости позволив выполняться другим выражениям». Как только строка запроса получена, она передается вспомогательному методу Response. Затем ответ асинхронно возвращается запросившему клиенту.

Сервер использует цикл чтения запроса и записи ответа. Это просто, но не без нескольких подвохов, о которых вы должны знать. Если сервер читает без записи, он не сможет обнаружить полузакрытое соединение. Если сервер пишет без чтения (например, отвечает большим объемом данных), он может вызвать взаимоблокировку с клиентом. Архитектура чтения-записи приемлема для простых внутренних сервисов, но не должна применяться для критически важных или общедоступных сервисов.

Метод Response принимает строку запроса, разбирает запрос и вычисляет строку ответу. Сильная и слабая стороны сервиса на основе сокета в том, что вы должны придумать нечто вроде собственного протокола. В данном случае предполагается, что запрос выглядит так:

Иначе говоря, сервис ожидает литерал «method=», за которым следуют строка «average» или «minimum», символ «&» и литерал «data=». Сами входные данные должны быть в виде значений, разделяемых пробелами. Запрос завершается символом «&» и литералом «eor» (аббревиатура от «end-of-request»). Недостаток сервисов на основе сокетов в сравнении с WCF состоит в том, что сериализация параметров со сложными типами может оказаться весьма нелегким делом.

В этом примере ответ сервиса прост: это строковое представление среднего или минимального значения для массива числовых величин. Во многих собственных клиент-серверных системах вам придется создавать какой-то протокол для ответа сервиса. Скажем, вместо отправки ответа просто в виде «4.00» может потребоваться передача ответа в форме «average=4.00».

Метод Process использует сравнительно лобовой подход для закрытия соединения, если возникает исключение. Альтернатива — применение C#-выражения using (которое будет автоматически закрывать любое соединение) и удаление явного вызова метода Close.

Преимущество низкоуровневых сервисов в том, что вы получаете больший контроль над доступом к данным.


Вспомогательные методы Average и Minimum определены следующим образом:

В большинстве ситуаций, если вы используете структуру программы, похожую на таковую у демонстрационного сервиса, ваши вспомогательные методы в этот момент соединялись бы с каким-то источником и получали бы некие данные. Преимущество низкоуровневых сервисов в том, что вы получаете больший контроль над доступом к данным. Например, если вы получаете данные от SQL, то можете использовать традиционный ADO.NET, Entity Framework или любой другой метод доступа к данным.

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

Заметьте, что в метод Response введена искусственная задержка:

Эта задержка, произвольно выставляемая на основе первого числового значения в запросе, включена для замедления сервиса, чтобы в WinForm- и веб-клиентах можно было продемонстрировать отзывчивость UI в ожидании ответа.

Демонстрационное клиентское приложение WinForm

Чтобы создать WinForm-клиент, показанный на рис. 1, я запустил Visual Studio 2012 и создал новое приложение WinForm на C# с названием DemoFormClient. Заметьте, что по умолчанию Visual Studio разбивает приложение WinForm на несколько файлов, отделяющих UI-код от логики. В сопутствующем этой статье пакете исходного кода я переработал код, разбитый Visual Studio на модули, и поместил его в один файл исходного кода. Вы можете скомпилировать приложение, запустив командную оболочку Visual Studio (которой известно, где находится компилятор C#) и выполнив команду: csc.exe /target:winexe DemoFormClient.cs.

Используя дизайнерские средства Visual Studio, я добавил ряд элементов управления: ComboBox, TextBox, два Button, ListBox и четыре Label. В свойство-набор Items элемента управления ComboBox я включил строки «average» и «minimum». Значения свойств Text элементов button1 и button2 я изменил на Send Async и Say Hello соответственно. Затем в режиме дизайнера я дважды щелкнул button1 и button2, чтобы зарегистрировать их обработчики событий. Эти обработчики я отредактировал, как показано на рис. 5.

Рис. 5. Обработчики событий щелчка кнопок в WinForm-клиенте

Заметьте, что сигнатура обработчика щелчков кнопки button1 была изменена и теперь включает модификатор async. Обработчик формирует имя сервера из строки и номера порта. При использовании сервисов на основе низкоуровневых сокетов механизм автоматического обнаружения отсутствует, поэтому у клиентов должен быть доступ к имени или IP-адресу сервера, а также к информации о портах.

Ключевые строки кода:

SendRequest — асинхронный метод, определенный в программе. Его вызов можно вольно трактовать так: «отправить асинхронный запрос, который вернет строку, а по окончании продолжить выполнение с выражения await tsResponse, которое встретится позже». Это позволяет приложению выполнять другие операции, ожидая ответ. Поскольку ответ инкапсулирован в Task, реальная строка результата должна быть извлечена из свойства Result. Этот строковый результат преобразуется в тип double для форматирования как числа с двумя разрядами после точки.

Альтернативный подход к вызову:

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

Здесь ключевое слово await подставляется в строку с вызовом SendRequest. Это немного упрощает вызывающий код, а также позволяет извлекать возвращаемую строку без вызова Task.Result. Какой вариант вы будете использовать, зависит от конкретной ситуации, но, как правило, лучше избегать явного использования свойства Result объекта Task.

Большая часть асинхронная работы выполняется в методе SendRequest (рис. 6). Так как SendRequest является асинхронным, лучше именовать его SendRequestAsync или MySendRequestAsync.

Рис. 6. Метод SendRequest в WinForm-клиенте

SendRequest принимает строку, представляющую имя сервера, и разрешает это имя в IP-адрес, используя тот же код, что и в конструкторе класса сервиса. Более простой вариант — передача имени сервера: await client.ConnectAsync(server, port).

После определения IP-адреса сервера создается экземпляр объекта TcpClient на основе сокета и используется метод ConnectAsync этого объекта для отправки запроса на соединение с сервером. После настройки объекта StreamWriter для передачи данных серверу по сети и объекта StreamReader для приема данных от сервера создается строка запроса с применением форматирования, ожидаемого сервером. Запрос отправляется и принимается асинхронно и возвращается методом в виде строки.

Демонстрационное клиентское веб-приложение

Я создал это приложение, показанное на рис. 1, в два этапа. Сначала с помощью Visual Studio я создал веб-сайт для хостинга приложения, а затем написал веб-приложение, используя Notepad. Я запустил Visual Studio 2012 и создал новый проект C# Empty Web Site с именем DemoClient по адресу http://localhost/. Это позволило подготовить необходимую инфраструктуру IIS к хостингу приложения и создать физическое местоположение, сопоставленное с веб-сайтом в C:\inetpub\wwwroot\DemoClient\. Кроме того, был создан базовый конфигурационный файл Web.config, который содержит информацию, позволяющую приложениям на сайте обращаться к асинхронной функциональности в .NET Framework 4.5:

Потом я запустил Notepad с административными привилегиями. Создавая простые приложения ASP.NET, я иногда предпочитаю пользоваться Notepad вместо Visual Studio, чтобы хранить весь код приложения в одном файле .aspx, не генерируя множество файлов и ненужные образцы кода. Я сохранил пустой файл как DemoWebClient.aspx в C:\inetpub\wwwroot\DemoClient.

Общая структура веб-приложения приведена на рис. 7.

Рис. 7. Структура демонстрационного клиентского веб-приложения

В начало страницы я добавил выражение Import, чтобы ввести в область видимости релевантные пространства имен .NET, а также директиву Page, включающую атрибут Async=true.

Блок script для C# содержит два метода: SendRequest и Button1_Click. В теле страницы приложения имеются два элемента управления TextBox и один Button для ввода, плюс элемент управления TextBox для вывода, в котором хранится ответ сервиса, а также неиспользуемый TextBox для демонстрации отзывчивости UI при ожидании приложением ответа на запрос от сервиса.

Код для метода SendRequest веб-приложения идентичен коду SendRequest в WinForm-приложении, а код для обработчика Button1_Click в веб-приложении лишь немногим отличается от такового в WinForm-приложении:

Хотя код веб-приложения и WinForm-приложения во многом совпадает, механизм вызова отличается весьма заметно. Когда пользователь выдает запрос из WinForm, этот клиент адресует вызов непосредственно сервису, и тот посылает ответ прямо WinForm. А когда пользователь выдает запрос из веб-приложения, оно посылает информацию запроса веб-серверу, на котором размещено данное приложение, потом веб-сервер вызывает сервис, тот отвечает веб-серверу, а веб-сервер конструирует страницу ответа. После этого страница ответа отправляется клиентскому браузеру.

Заключение

Итак, когда следует задуматься о применении асинхронных TCP-сокетов вместо WCF? Лет десять назад, до создания WCF и предшествующей ей технологии ASP.NET Web Services, если вы хотели создать клиент-серверную систему, использование сокетов зачастую было самым логичным вариантом. Введение WCF было большим достижением, но, поскольку WCF рассчитана на огромное количество разнообразных сценариев, ее использование в простых клиент-серверных системах может оказаться перебором. Хотя новейшую версию WCF легче конфигурировать, чем предыдущие версии, она все равно остается весьма сложной.

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

Сравнительно новый подход к реализации клиент-серверных систем заключается в применении инфраструктуры ASP.NET Web API для HTTP-сервисов в сочетании с ASP.NET-библиотекой SignalR для поддержки асинхронных методов. Во многих случаях этот подход проще реализовать, чем при использовании WCF, и он позволяет избегать многих низкоуровневых деталей, неизбежных при работе с сокетами.

Джеймс Маккафри (Dr. James McCaffrey) работает на Microsoft Research в Редмонде (штат Вашингтон). Принимал участие в создании нескольких продуктов Microsoft, в том числе Internet Explorer и Bing. С ним можно связаться по адресу jammc@microsoft.com.

Выражаю благодарность за рецензирование статьи экспертам Пиали Чоудхури (Piali Choudhury) из MS Research, Стивену Клири (Stephen Cleary) (консультант), Адаму Эверсоулу (Adam Eversole) из MS Research, Линну Пауэрсу (Lynn Powers) из MS Research и Стефену Таубу (Stephen Toub) из Microsoft.

Реферат: Технология Клиент-сервер 3

3 Технология «Клиент – сервер»

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

Со временем малофункциональную модель файлового сервера для локальных сетей (FS) заменили появившиеся одна за одной модели структуры «Клиент- сервер» (RDA, DBS и AS).

Заняв нишу баз данных, технология «Клиент – сервер» стала основной технологией глобальной сети Internet. Далее, в результате перенесения идей сети Internet в среду корпоративных систем, появилась технология Intranet. В отличие от технологии «Клиент-сервер» эта технология ориентирована не на данные, а на информацию в ее окончательно готовом к потреблению виде. Вычислительные системы, построенные на основе Intranet, имеют в своем составе центральные серверы информации и распределенные компоненты представления информации конечному пользователю (программы-навигаторы, или браузеры). Взаимодействие между клиентом и сервером в Intranet происходит при помощи web – технологий.

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

3.1 Классическая двухуровневая архитектура «Клиент – сервер»

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

Технология «Клиент – сервер» — это архитектура программного комплекса, в которой происходит распределение прикладной программы по двум логически различным компонентам (клиент и сервер), взаимодействующим по схеме «запрос-ответ» и решающим свои определенные задачи (рисунок 6).

Рисунок 6 – Архитектура «Клиент – сервер»

Компьютер (или программа), управляющий и/или владеющий каким-либо ресурсом, называют сервером этого ресурса.

Компьютер (или программа), запрашивающий и пользующийся каким-либо ресурсом, называют клиентом этого ресурса.

Основной принцип технологии «Клиент-сервер» заключается в разделении функций приложения как минимум на три группы:

— модули интерфейса с пользователем;

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

— модули хранения данных ;

Эту группу также называют бизнес-логикой. Бизнес-логика определяет, для чего конкретно предназначено приложение (например, прикладные функции, характерные для данной предметной области). Разделение приложения по границам между программами обеспечивает естественную основу для распределения приложения на нескольких компьютерах.

— модули обработки данных (функции управления ресурсами);

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

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

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

— компонент представления данных;

— компонент управления ресурсом.

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

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

Чтобы избежать несогласованности различных элементов архитектуры были созданы две модификации двухзвенной архитектуры «Клиент – сервер»: «Толстый клиент» («Тонкий сервер») и «Тонкий клиент» («Толстый сервер»).

В данных архитектурах разработчики попытались выполнять обработку данных на одной из двух физических частей — либо на стороне клиента («Толстый клиент»), либо на сервере («Тонкий клиент).

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

Есди все-таки разрабатывается двухуровневая классическая архитектура «Клиент – сервер», то необходимо помнить следующее:

— архитектура «Толстый сервер» аналогична архитектуре «Тонкий клиент» (рисунок 33) ;

Рисунок 33. – Архитектура «Тонкий клиент»

Передача запроса от клиента на сервер, обработка запроса сервером и передача результата клиенту. При этом архитектуры имеют следующие недостатки:

— усложняется реализация, так как языки типа SQL не приспособлены для разработки подобного ПО и нет хороших средств отладки;

— производительность программ, написанных на языках типа SQL, значительно ниже, чем созданных на других языках, что имеет важное значение для сложных систем;

— программы, написанные на СУБД-языках, обычно работают недостаточно надежно; ошибка в них может привести к выходу из строя всего сервера баз данных;

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

— архитектура «Тонкий сервер» аналогична архитектуре «Толстый клиент» (рисунок 34).

Обработка запроса происходит на стороне клиента, то есть происходит передача клиенту всех необработанных данных с сервера. При этом архитектуры имеют следующие недостатки:

— усложняется обновление ПО, поскольку его замену нужно производить одновременно по всей системе;

— усложняется распределение полномочий, так как разграничение доступа происходит не по действиям, а по таблицам;

— перегружается сеть вследствие передачи по ней необработанных данных;

— слабая защита данных, поскольку сложно правильно распределить полномочия.

Рисунок 34. – Архитектура «Толстый клиент»

Для решения перечисленных проблем используются многоуровневые (три и более уровней) архитектуры «Клиент-сервер».

3.2 Трехуровневая модель

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

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

Сервер приложений – это программное обеспечение, являющееся промежуточным слоем между клиентом и сервером (рисунок 35).

Рисунок 35 — Сервер приложений

Существует несколько категорий продуктов промежуточного слоя:

— Message orientated – яркие представители MQseries и JMS;

— Object Broker – яркие представители CORBA и DCOM;

— Component based – яркие представители.NET и EJB.

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

Существует несколько серверов приложений от таких знаменитых компаний как Sun Microsystem, Borland, IBM, Oracle и каждый из них отличается набором предоставляемых сервисов (производительность в данном случае учитывать не будем). Эти сервисы облегчают программирование и развертывание приложений масштаба предприятия. Обычно сервер приложений предоставляет следующие сервисы:

— WEB Server – чаще всего включают в поставку самый популярный и мощный Apache;

— WEB Container – позволяет выполнять JSP и сервлеты. Для Apache таким сервисом является Tomcat;

— CORBA Agent – может предоставлять распределенную директорию для хранения CORBA объектов;

— Messaging Service – брокер сообщений;

— Transaction Service – уже из названия понятно, что это сервис транзакций;

— JDBC – драйвера для подключения к базам данных, ведь именно серверу приложений придется общаться с базами данных и ему нужно уметь подключаться к используемой в вашей компании базе;

— Java Mail – данный сервис может предоставлять сервис к SMTP;

— JMS (Java Messaging Service) – обработка синхронных и асинхронных сообщений;

— RMI (Remote Method Invocation) — вызов удаленных процедур.

Многоуровневые клиент-серверные системы достаточно легко можно перевести на Web-технологию — для этого достаточно заменить клиентскую часть универсальным или специализированным браузером, а сервер приложений дополнить Web-сервером и небольшими программами вызова процедур сервера. Для разработки этих программ можно использовать как Common Gateway Interface (CGI), так и более современную технологию Java.

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

Из всего вышесказанного можно сделать вывод, что двухуровневая архитектура сильно уступает многоуровневой архитектуре, поэтому в настоящее время используется только многоуровневая архитектура «Клиент – сервер», в которой различают три модификации — RDA, DBS и AS.

3 .3 Различные модели технологии «Клиент – сервер»

Самой первой базовой технологией для локальных сетей являлась модель файлового сервера (FS) . В свое время данная технология была очень среди отечественных разработчиков, использовавших такие системы, как FoxPro, Clipper, Clarion, Paradox и так далее.

В модели FS функции всех трех компонентов (компонент представления, прикладной компонент и компонент доступа к ресурсам) совмещены в одном коде, который выполняется на компьютере-сервере (хосте). Компьютер-клиент в данной архитектуре вообще отсутствует, а ввод и отображение данных производятся через терминал или компьютер в режиме эмуляции терминала. Приложения обычно разрабатываются на языке четвертого поколения (4GL). Один из компьютеров в сети считается файловым сервером и предоставляет другим компьютерам услуги по обработке файлов. Он работает под управлением сетевых ОС и играет роль компонента доступа к информационным ресурсам. На других ПК в сети функционирует приложение, в кодах которого совмещены компонент представления и прикладной компонент.

Технология взаимодействия клиента и сервера следующая: запрос направляется на файловый сервер, который передает СУБД, размещенной на компьютере-клиенте, требуемый блок данных. Вся обработка осуществляется на терминале (рисунок 4).

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

Рисунок 4 — Модель файлового сервера

Преимуществами данной технологии являются:

— простота разработки приложений;

— удобство администрирования и обновления ПО из-за компактного расположения всех компонентов на одном компьютере;


— низкая стоимость оборудования рабочих мест (терминалы или дешевые компьютеры с невысокими характеристиками в режиме эмуляции терминала всегда дешевле полноценных ПК).

Но достоинства FS – модели перекрывают ее недостатки:

— большая загрузка сети;

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

— дорогостоящее аппаратное обеспечение сервера , так как все пользователи разделяют его ресурсы;

— отсутствие графического интерфейса .

Благодаря решению проблем, присущих технологии «Файл – сервер» появилась более прогрессивная технология, получившая название «Клиент – сервер».

Для современных СУБД архитектура «клиент-сервер» стала фактически стандартом. Если предполагается, что проектируемая сетевая технология будет иметь архитектуру «клиент-сервер», то это означает, что прикладные программы, реализованные в ее рамках, будут иметь распределенный характер, то есть часть функций приложений будет реализована в программе-клиенте, другая — в программе-сервере.

Различия в реализации приложений в рамках технологии «Клиент-сервер» определяются четырьмя факторами:

какие виды программного обеспечения в логических компонентах;

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

— как логические компоненты распределяются компьютерами в сети;

— какие механизмы используются для связи компонент между собой.

Исходя из этого, выделяются три подхода, каждый из которых реализован в соответствующей модели технологии «Клиент – сервер»:

— модель доступа к удаленным данным (Remote Date Access — RDA);

— модель сервера базы данных (DateBase Server — DBS);

— модель сервера приложений (Application Server — AS).

Рассмотрим функции и характеристики различных моделей технологии «Клиент-сервер».

Модель доступа к удаленным данным (RDA) – сетевая архитектура технологии «Клиент – сервер», при которой коды компонента представления и прикладного компонента совмещены и выполняются на компьютере-клиенте. Доступ к информационным ресурсам обеспечивается при помощи непроцедурного языка (например ,SQL – запросов для баз данных) или вызовами функций специальной библиотеки (если имеется специальный интерфейс прикладного программирования — API).

Запросы к информационным ресурсам направляются по сети удаленному компьютеру, который обрабатывает и выполняет их, возвращая клиенту блоки данных (рисунок 1).

Рисунок 1 — Модель доступа к удаленным данным

Основным преимуществом RDA-модели является широкий выбор инструментальных средств разработки приложений, обеспечивающих быстрое создание desktop-приложений, работающих с SQL-ориентированными СУБД. Обычно инструментальные средства поддерживают графический интерфейс пользователя с ОС, а также средства автоматической генерации кода, в которых смешаны прикладные функции и функции представления.

При этом RDA-модель имеет ряд ограничений.

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

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

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

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

Несмотря на широкое распространение, RDA-модель уступает место более технологичной DBS-модели.

Модель сервера баз данных (DBS) — сетевая архитектура технологии «Клиент – сервер», основу которой составляет механизм хранимых процедур, реализующий прикладные функции. В DBS – модели понятие информационного ресурса сужено до базы данных из-за того же механизма хранимых процедур, который реализован в СУБД, да и то не во всех.

В DBS-модели приложение является распределенным. Компонент представления выполняется на компьютере-клиенте, в то время как прикладной компонент (реализующий бизнес-функции) оформлен как набор хранимых процедур и функционирует на компьютере-сервере БД. Хранимые процедуры также называют компилируемыми резидентными процедурами или процедурами базы данных (рисунок 2).

Рисунок 2 — Модель сервера базы данных.

Преимущества DBS-модели перед RDA-моделью очевидны: это и возможность централизованного администрирования различных функций, и снижение трафика сети из-за того, что вместо SQL-запросов по сети передаются вызовы хранимых процедур, и возможность разделения процедуры между несколькими приложениями, и экономия ресурсов компьютера за счет использования единожды созданного плана выполнения процедуры. Однако есть и недостатки.

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

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

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

На практике чаще используется разумный синтез RDA- и DBS-моделей для построения многопользовательских информационных систем: поддержка целостности базы данных и некоторых простейших прикладные функции хранимых процедур (DBS-модель), а более сложные функции реализуются непосредственно в прикладной программе, которая выполняется на компьютере-клиенте (RDA-модель).

Все недостатки DBS — модели учтены в AS-модели, которая в наибольшей степени отражает сильные стороны технологии «клиент-сервер».

Модель сервера приложений (AS) (рисунок 3)- сетевая архитектура технологии «Клиент – сервер», представляющая собой процесс, выполняемый на компьютере-клиенте и отвечающий за интерфейс с пользователем (ввод и отображение данных). Основным элементом данной модели является прикладной компонент, называющийся сервером приложения, функционирующий на удаленном компьютере (или нескольких компьютерах). Сервер приложений реализован как группа прикладных функций, оформленных в виде сервисов (служб). Каждый сервис предоставляет некоторые услуги всем программам, которые желают и могут ими воспользоваться.

Рисунок 3 — Модель сервера приложений.

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

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

Так как данные «спрятаны» за сервером приложений, в котором обычно встроена проверка полномочий клиента, в СУБД обеспечивается высокий уровень защиты данных.

Доступ к информационным ресурсам, необходимым для решения прикладных задач, обеспечивается как и в RDA-модели менеджером ресурсов (например, SQL-сервер). Из прикладных компонентов доступны такие ресурсы как, базы данных, очереди, почтовые службы и другие. Серверы приложений выполняются, как правило, на том же компьютере, где функционирует менеджер ресурсов, что избавляет от необходимости направления SQL-запросов по сети и повышает производительность системы, Также серверы приложений могут выполняться и на других компьютерах.

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

Изучив все модели технологии «Клиент – сервер», можно сделать следующий вывод: RDA- и DBS-модели имеют в основе двухзвенную схему разделения функций. В RDA-модели прикладные функции отданы клиенту, в DBS-модели их реализация осуществляется через ядро СУБД. В RDA-модели прикладной компонент сливается с компонентом представления, в DBS-модели интегрируется в компонент доступа к ресурсам.

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

Результаты анализа моделей технологий «Файловый сервер» и «Клиент – сервер» представлены в таблице 1.

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

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

Таким образом, если предстоит работа с небольшими информационными системами, не требующими графического интерфейса с пользователем, можно выбрать FS — модель. Проблему графического интерфейса легко решает RDA-модель. DBS-модель является хорошим вариантом для СУБД. AS-модель является лучшим вариантом для создания больших информационных систем, а также в случае использования низкоскоростных каналов связи.

Таблица 1 — Результаты анализа моделей технологий «Файловый сервер» и «Клиент – сервер»

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

Степень защиты данных

Требования к характеристикам сервера

Трафик, создаваемый в сети

Сложность обновления ПО

Требования к характеристикам сети

Требования к характеристикам рабочих станций

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

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

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

3 .4 Программное обеспечение технологии «Клиент – сервер»

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

Для успешного применения технологии «Клиент-сервер» должно использоваться соответствующее программное обеспечение, включающее клиентскую и серверную части.

Программное обеспечение, установленное на сервере для управления базой данных, реагируя на запросы клиентов, начинает поиск информации. Как часть системы «клиент-сервер» оно возвращает только результаты поиска.

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

Программное обеспечение сервера предусматривает и другие действия над информацией: обновление, удаление, добавление, защита и так далее.

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

Инструментальные средства, приложения и утилиты для интерфейсной части дополняют возможности модели «Клиент-сервер». К ним относятся средства запросов, которые упрощают доступ к данным сервера, используя предопределенные запросы и встроенные возможности для построения отчетов, пользовательские приложения, которые могут работать в качестве интерфейсной части, предоставляя доступ к серверу базы данных. Другие приложения (такие, как Microsoft Access) имеют свой собственный SQL, который обеспечивает доступ к системам управления базами данных от разных производителей. Для реализации систем «Клиент-сервер» необходимы специально разработанные интерфейсные части. Средства разработки программ (например, Microsoft Visual Basic) значительно облегчают программистам и администраторам информационных систем создание приложений, которые отвечают за доступ к серверам базы данных.

В зависимости от выбора операционной системы (ОС) и поставленных задач определяется программное обеспечение. Так, если используется ОС Windows, то на компьютере – клиенте обычно используется пакет Microsoft Office, в состав которого входят текстовый процессор Word, табличный процессор Excel, система подготовки презентаций PowerPoint, система управления базами данных Access и программа управления информацией Outlook

В связи с успехом распространения пакета Microsoft Office корпорация Microsoft решила собрать комплекс программ для сервера –пакет MS BackOffice. В состав названного пакета входят Windows Server – сетевая операционная система, System Management Server – система администрирования сети, SQL Server – сервер управления базами данных, SNA Server – сервер для соединения с хост-компьютерами, Exchange Server – сервер системы электронной почты и Internet Information Server – сервер для работы с Internet.

Windows Server 2000/2003/2008 способна обеспечить совместное использование файлов, печатающих устройств, предоставить услуги по соединению с рабочими станциями (клиентскими компьютерами) и другой сервис.

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

Windows Server 2000/2003/2008 обеспечивает совместное использование не только множества процессов, но и ресурсов многими пользователями. Возможность соединения с удаленными сетями реализуется через сервис удаленного доступа – RAS (Remote Access Service), а также через средства связи с сетями других фирм (Novell, Digital Pathworks и Apple).

System Management Server (SMS) позволяет сетевому администратору централизованно управлять всей сетью. При этом обеспечивается возможность администрирования каждого компьютера, подключенного к сети, включая установленное на нем программное обеспечение. SMS предоставляет различные виды сервиса, например управление сетевыми приложениями и инвентаризацией программного и аппаратного обеспечения. SMS включает в себя автоматизацию установки и распространения программного обеспечения, включая его обновление, удаленное устранение неисправностей и предоставление полного контроля администратору за устройствами ввода и экранами всех компьютеров в сети.

SQL Server представляет собой систему управления реляционными базами данных, использующую принципы технологии «Клиент-сервер». MS SQL Server поддерживает систему обработки транзакций и механизм распределенных транзакций, систему сохранения ссылочной целостности и тиражирование данных.

SNA Server позволяет нескольким настольным ПЭВМ, работающим под управлением различных операционных систем «видеть» хост-компьютеры.

Exchange Server обеспечивает средства передачи и приема сообщений в информационной сети организации. Этот сервис включает электронную почту (E-mail) и обмен информационными сообщениями для рабочих групп. Microsoft Exchange Server построен на принципах технологии «Клиент-сервер» и масштабируется в соответствии с возрастанием вычислительных возможностей сети.

Internet Information Server обеспечивает возможность создания Web-, FTP- и Gopher-серверов для сети Internet, поддерживает управление ими с помощью встроенной программы Internet Service Manager.

3 .5 Организация обработки данных в СУБД с архитектурой «Клиент-сервер»

Существуют различные классификации баз данных (БД), например по степени изменчивости их можно подразделить на условно-постоянные (такие БД используются в основном для справочных систем) и сильно динамичные (используются например в банковских системах).

Термин «сервер баз данных» обычно используют для обозначения всей СУБД, основанной на архитектуре «Клиент-сервер», включая и серверную, и клиентскую части. Такие системы предназначены для хранения и обеспечения доступа к базам данных.

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

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

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

Поэтому любая СУБД не может одинаково успешно применяться при работе с БД разных классов.

Доступ к базе данных от прикладной программы или пользователя производится путем обращения к клиентской части системы. В качестве основного интерфейса между клиентской и серверной частями выступает язык запросов баз данных — SQL. Это язык представляет собой текущий стандарт интерфейса СУБД в открытых системах. Собирательное название SQL-сервер относится ко всем серверам баз данных, основанных на SQL.

Серверы баз данных, интерфейс которых основан исключительно на языке SQL, обладают своими преимуществами и своими недостатками. Очевидное преимущество – стандартность интерфейса. Недостаток тоже довольно очевиден. При таком высоком уровне интерфейса между клиентской и серверной частями системы на стороне клиента работает слишком мало программ СУБД. Это нормально, если на стороне клиента используется маломощная рабочая станция. Но если клиентский компьютер обладает достаточной мощностью, то часто возникает желание возложить на него больше функций управления базами данных, разгрузив сервер, который является узким местом всей системы.

Одним из перспективных направлений СУБД является гибкое конфигурирование системы, при котором распределение функций между клиентской и пользовательской частями СУБД определяется при установке системы.

Одним из основополагающих механизмов организации обработки данных в СУБД с практически любой архитектурой, в том числе и с архитектурой «Клиент-сервер» является механизм транзакций.

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

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

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

О важности механизма поддержки транзакций можно судить на примере перечисления денег между счетами клиентов банка. Данная транзакция состоит из множества операций от перечисления денег до получения другим клиентом. И если произойдет сбой какой-либо из операций, то деньги просто не дойдут до получателя и останутся у отправителя.

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

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

— коммуникационный менеджер, контролирующий обмен сообщениями между компонентами информационной системы;

— менеджер авторизации, обеспечивающий аутентификацию пользователей и проверку их прав доступа;

— менеджер транзакций, управляющий распределенными операциями;

— менеджер ведения журнальных записей, контролирующий восстановление и откат транзакций;

— менеджер блокировок, обеспечивающий правильный доступ к совместно используемым данным.

Обычно коммуникационный менеджер объединен с авторизационным, а менеджер транзакций работает совместно с менеджерами блокировок и системных записей. Причем такой менеджер редко входит в комплект поставки, поскольку его функции (ведение записей, распределение ресурсов и контроль операций), как правило, выполняет сама база данных.

Первые менеджеры транзакций появились еще в начале 70-х годов прошлого века и использовались еще в технологии «Файловый сервер». С приходом технологии «Клиент — сервер» они незначительно изменились идеологически, но весьма существенно — технологически. Наибольшие идеологические изменения произошли в коммуникационном менеджере, так как в этой области появились новые объектно-ориентированные технологии (CORBA, DCOM и так далее).

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

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

С появлением технологии «Клиент – сервер» и объектно-ориентированного подхода в программировании мониторы транзакций не исчезли, а перешли на более современную ступень развития.

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

Являясь по существу программной прослойкой между приложением и системой или системами СУБД, мониторы транзакций упрощают жизнь разработчикам банковских, бухгалтерских или складских СУБД. Изначально программист создает достаточно функциональную однопользовательскую программную версию, которая может работать как многопользовательская с условием, что параллельно будут решаться задачи производительности и логики. Мониторы транзакций позволяют вынести эти задачи на уровень администратора системы, при этом приложение должно быть модифицировано так, чтобы оно могло выдавать транзакции, написанные на языке монитора транзакций, а не обращаться прямо к базе данных посредством обычных механизмов (подобных различным формам встроенного SQL). Программисты прикладных систем являются также ответственными за составление файла описания, который отображает транзакции в определенные обращения к базе данных на родном языке обращений нижележащей СУБД (почти для всех СУБД под UNIX это SQL).

Основными характеристиками мониторов транзакций являются:

— гибкость доступа к данным;

Использование мониторов транзакций практически не накладывает каких-либо ограничений на многообразие или сложность запросов доступа к СУБД.

Монитор транзакций представляет собой многопоточное приложение, одновременно открывая собственное соединение с СУБД и устраняя необходимость выполнения каждым прикладным процессом прямых запросов к СУБД. При этом число одновременно работающих пользователей СУБД существенно сокращается, что особенно важно для СУБД с реализацией «Один к одному» (рисунок 5).


В СУБД с реализацией «Один к одному» для каждого клиента на сервере используется отдельный процесс, даже если программа-клиент физически выполняется на отдельной системе. Таким образом, для работы каждого клиентского приложения используются два процесса — один на сервере и один на клиентской системе. Мониторы транзакций используются для того, чтобы существенно снизить дополнительные расходы на организацию управления таким большим количеством процессов. Обычно они предполагают наличие одного кластера из нескольких процессов (от одного до пяти), работающих на серверной системе. Эти процессы имеют внутреннюю многопотоковую организацию, что обеспечивает обслуживание запросов множества клиентов.

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

Одним из современных мониторов транзакций является Microsoft Transaction Server (MTS). Microsoft Transaction Server обеспечивает поддержку транзакций, служб масштабирования, управления подключениями и администрирования, которые позволяют создавать и развертывать масштабируемые серверные приложения, делая при этом управление транзакциями прозрачным для разработчика компонентов.

Ни утилиты для серверов БД, ни распределенные СУБД, ни средства создания серверов приложений для новых версий пакетов разработки фронтальных систем, ни ПО передачи сообщений (ПО доставки сообщений в оговоренный интервал времени и частичной поддержки транзакций) не могут в полной мере заменить мониторы транзакций.

Рисунок 5 – Конфигурация СУБД с архитектурой «Клиент-сервер» для работы с мониторами обработки транзакций.

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

3. 6 Технология «Клиент-сервер» применительно к Internet

С появлением глобальных сетей многоуровневая архитектура «Клиент – сервер» нашла свое применение в Internet. Другими словами, архитектура Internet не что иное, как архитектура «Клиент – сервер»: пользователь всегда работает с программой — клиентом (Internet Explorer или Netscape Navigator), которая обращается к web-серверам, обслуживающим одновременно десятки и сотни запросов от клиентов по всему миру.

Компьютеры — серверы постоянно соединены с глобальной сетью и готовы предоставлять сервис (например, пересылать почту), отвечая при этом на десятки и сотни запросов одновременно. Web — серверы защищены от сбоев электропитания и работают обычно под одной из модификаций ОС UNIX.

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

Помимо клиентов-браузеров бывают и другие клиенты, например, клиенты электронной почты (Outlook Express, Netscape Messenger, The Bat, Pegasus Mail, Pine, Eudora и другие.), клиенты для приема и передачи файлов (ftp-клиенты), telnet-клиенты, которые необходимы для интерактивной работы на удаленном узле (простейший telnet-клиент — программа telnet.exe) и многие другие.

Программы-серверы также разнообразны: web – сервер, DNS – сервер, ftp-сервер (для передачи файлов), сервер приложений (для удаленной работы с приложениями), сервер электронной почты и другие.

Технология «Клиент – сервер» для Internet организована следующим образом (рисунок 55):

— клиент формирует и посылает запрос на сервер;

Передачу с сервера на рабочую станцию документов и других объектов по запросам, поступающим от браузера, обеспечивает функционирующая на сервере программа, называемая web-сервером. Когда web-браузеру необходимо получить документы или другие объекты от Web-сервера, он отправляет серверу соответствующий запрос. При достаточных правах доступа между сервером и навигатором устанавливается логическое соединение.

— сервер производит необходимые манипуляции с данными, формирует результат и передаёт его клиенту;

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

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

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

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

Цикл повторяется, пока пользователь не закончит работу с сервером.

Риунок 55 — Технология «Клиент – сервер» для Internet

В сервисе WWW для передачи информации применяется протокол НТТР, при работе которого сервер не имеет никакой информации о состоянии браузера. При этом взаимодействовать с сервером возможно только через механизм URL, это создает некоторые трудности при реализации клиентской части. Схема передачи информации по протоколу НТТР состоит из следующих этапов (рисунок 56):

— браузер преобразует доменное имя из URL в IP-адрес и устанавливает соединение с сервером;

— браузер передает остальную часть URL на сервер;

— сервер определяет по URL путь и имя файла, при необходимости формирует его динамически;

— сервер пересылает файл браузеру;

— сервер разрывает соединение;

— браузер отображает документ.

Существует множество технологий и языков программирования для написания серверных и клиентских Internet – приложений. В настоящее время большое распространение получила технология Java, с помощью которой можно строить универсальные системы со смешанной архитектурой, приложения, выполняемые на стороне клиента, называются апплетами (applets), на стороне сервера — сервлетами (servlets). Достаточно большой популярностью пользуется Flash-технология, в рамках которой можно создавать медиа-насыщенные интерактивные ресурсы, основная рабочая нагрузка при этом ложится на компьютер пользователя.

Рисунок 56. — Схема работы по HTTP в архитектуре «Клиент-сервер» для Internet

С помощью CGI (Common Gateway Interface) приложений возможно взаимодействие с любыми базами данных через формирование SQL запросов, или другие механизмы; также возможна реализация счетчиков посещений, гостевых книг и других расширений. CGI реализуется через скрипты на любом из языков программирования высокого уровня (наиболее часто используют С++, Perl, VisualBasic, Pascal, Java).

Server Sides Includes (SSI/SSI+) — технология динамического формирования документов (в том числе и работы с БД). Скрипт (точнее серверные инструкции) находится в HTML файле обычно имеющем расширение sht или shtm, при этом серверные инструкции размещаются между специальными разделителями (tokens), а сами инструкции записаны на языке Сscript, хотя это в большей степени зависит собственно от сервера. При пересылке такой файл сканируется сервером на наличие SSI инструкций и результат динамически подставляется в посылаемый документ. SSI реализуется через специальные компоненты (динамические библиотеки), которые входят в состав сервера. По аналогичному принципу организована работа со скриптами на языке PHP, в этом случае, программные конструкции включаются в HTML с помощью разделителей .

Схожей по технике формирования динамических страниц является технология Active Server Pages (ASP) от Microsoft. Данная технология опирается на использование разнообразных объектов и компонент (COM, ActiveX и тому подобное), работа с которыми ведётся средствами языков VBScript или JavaScript.

Internet Server Application Programming Interface (ISAPI), реализуется через механизм DLL. C помощью ISAPI Internet connector возможно взаимодействие с базами данных (SQL Server, Oracle, RBase, Access, Paradox, dBASE) через драйверы Open Database Connectivity (ODBC), также возможна реализация других расширенных функций (создание различных фильтров запросов). Основным средством разработки приложений является Microsoft Visual C++ (The Internet Server API Extension Wizard). Данный механизм поддерживается Microsoft Internet Information Server (MS IIS).

Также нашли свое применение JavaScript, VBScript, SGML, HTML, XML и другие языки, ориентированные на описание структур документов.

3 .7 Технология «Клиент-сервер» применительно к Intranet

Для реализации всех достоинств глобальной сети в пределах сети организации, при этом обеспечивая секретность внутренней информации разработали Intranet.

Intranet — частная компьютерная сеть, являющаяся внутренней web-системой, локализованной в пределах одной организации, в которой используются стандарты и протоколы Internet (сервисы Web, TCP/IP, http, протоколы связи и HTML – страницы). Другими словами, Intranet – это частная, защищенная внутрикорпоративная сеть, при построении которой используются технологии Internet, доступная только сотрудникам организации, причем независимо от их физического местонахождения, ведь для доступа в Intranet сети используется Internet как транспорт

Термин «Intranet» впервые появился 19 апреля 1995 году в журнале Digital News & Review.

Для преобразования локальной или региональной компьютерной сети в Intranet не потребуется распродавать старое оборудование, можно обойтись уже существующими ресурсами.

Архитектура Intranet основана на архитектуре «Клиент-сервер» (рисунок 57).

В качестве клиентских программ используются браузеры. При изменениях функциональности корпоративной информационной системы обновление клиентского ПО не требуется. Web-сервер выступает в качестве сервера приложений. Клиент и сервер взаимодействуют обычно по локальной сети, где есть выход в Internet через брандмауэр. Брандмауэром (firewall) – это компьютер с установленным на нем специальном программным обеспечением, позволяющим:

— идентифицировать любого входящего извне пользователя, чтобы запретить или разрешить ему доступ;

— аудит и протоколирование вхождений — запись, кто, когда и зачем входил во внутреннюю сеть;

— криптографию — шифрование секретной информации.

— экранирование — возможность односторонней передачи данных.

Рисунок 56 – Простейшая схема Intranet с архитектурой «Клиент – сервер»

Наличие диалоговых свойств в HTML и интерфейса CGI позволяет строить Internet-приложения с доступом к БД. Наиболее распространена схема динамической публикации отчетов. При этом в качестве CGI-процедуры используется параметризуемый генератор отчетов. Однако это не единственная схема, возможно применять программы ввода и обновления информации в БД.

Если используются традиционные статичные страницы гипертекста, то в ответ на запрос клиента Web-сервер передает страницу в формате HTML. При работе с базой данных клиент указывает в форме программу или сценарий для запуска на сервере. Серверная процедура получает введенные пользователем данные, формирует и передает SQL-запрос (определяющий логику управления данными) и, возможно, данные к СУБД. Сервер БД по запросу выполняет обновление, вставку, удаление или выборку записей из БД. CGI-процедура преобразует полученные результаты в формат HTML или в формат диалоговых переменных. Затем Web-сервер посылает полученную HTML-cтраницу или значения диалоговых переменных браузеру для отображения.

Использование CGI-процедур имеет ряд недостатков – статичное представление информации, преобразование результата-отчета в HTML-файл, отсутствие динамического просмотра изменения информации в базе данных, процедура «не помнит состояний запросов» – каждое обращение к БД требует повторного установления соединения. Кроме того, такой принцип работы перегружает коммуникационную среду и имеет системные издержки при запуске серверных процессов.

Для устранения недостатков CGI используют возможности специальных API для Web-серверов и включают дополнительное «релейное» звено в архитектуру. Все это только подталкивает к дальнейшему совершенствования архитектуры «Клиент-сервер».

Intranet имеет пять основных функций:

— совместное использование файлов;

— поиск и управление сетью.

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

Основные достоинства Intranet:

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

Web, благодаря поддержке открытых стандартов, легко интегрируется в уже существующую гетерогенную среду, сохраняя затраты на аппаратное обеспечение.

Web, как средство доступа к базам данных и приложениям, меняет традиционное отношение к архитектуре «Клиент – сервер». Используя браузер, как средство доступа к корпоративной сети, пользователь получает единый инструмент для работы с базами данных, приложениями и различными другими службами.

По сравнению с традиционными методами разработки, дистрибуции и поддержки приложений «Клиент – сервер» затраты при использовании Intranet Web-технологии достаточно низкие. Например, в Web-приложениях, работающих с базами данных, используя Web-браузер как единый интерфейс, существенно снижается стоимость разработки и сопровождения программного обеспечения клиентской части.

Используя гибкие и мощные механизмы защиты можно построить Intranet-сеть той степени защищенности, которая необходима.

Для достижения такого уровня производительности в сети используется один из основополагающих принципов построения Intranet — наращиваемость.

— легкий доступ к корпоративным данным может спровоцировать их утечку к конкурентам через недобросовестного работника;

— работоспособность и гибкость Интранет требуют значительных накладных расходов на разработку и администрирование;

— Intranet, как и любая сеть может быть взломана и использована в корыстных целях.

IT-блог о веб-технологиях, серверах, протоколах, базах данных, СУБД, SQL, компьютерных сетях, языках программирования и создание сайтов.

О модели взаимодействия клиент-сервер простыми словами. Архитектура «клиент-сервер» с примерами

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем рубрику Сервера и протоколы. В этой записи мы поговорим о том, как работают приложения и сайты в сети Интернет, да и вообще в любой компьютерной сети. В основе работы приложения лежит так называемая модель взаимодействия клиент-сервер, которая позволяет разделять функционал и вычислительную нагрузку между клиентскими приложениями (заказчиками услуг) и серверными приложениями (поставщиками услуг).

Модель взаимодействия клиент-сервер. Архитектура «клиент-сервер».

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

Концепция взаимодействия клиент-сервер

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

Здесь мы разберемся с концепцией, которая позволяет нам выполнять все эти действия в сети Интернет. Данная концепция получила название «клиент-сервер». Как понятно из названия, в данной концепции участвуют две стороны: клиент и сервер. Здесь всё как в жизни: клиент – это заказчик той или иной услуги, а сервер – поставщик услуг. Клиент и сервер физически представляют собой программы, например, типичным клиентом является браузер. В качестве сервера можно привести следующие примеры: все HTTP сервера (в частности Apache), MySQL сервер, локальный веб-сервер AMPPS или готовая сборка Denwer (последних два примера – это не проста сервера, а целый набор серверов).

Клиент и сервер взаимодействую друг с другом в сети Интернет или в любой другой компьютерной сети при помощи различных сетевых протоколов, например, IP протокол, HTTP протокол, FTP и другие. Протоколов на самом деле очень много и каждый протокол позволяет оказывать ту или иную услугу. Например, при помощи HTTP протокола браузер отправляет специальное HTTP сообщение, в котором указано какую информацию и в каком виде он хочет получить от сервера, сервер, получив такое сообщение, отсылает браузеру в ответ похожее по структуре сообщение (или несколько сообщений), в котором содержится нужная информация, обычно это HTML документ.

Сообщения, которые посылают клиенты получили названия HTTP запросы. Запросы имеют специальные методы, которые говорят серверу о том, как обрабатывать сообщение. А сообщения, которые посылает сервер получили название HTTP ответы, они содержат помимо полезной информации еще и специальные коды состояния, которые позволяют браузеру узнать то, как сервер понял его запрос.

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

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

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

Простая схема взаимодействия клиент-сервер

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

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

Почему веб-мастеру нужно понимать модель взаимодействия клиент-сервер

Давайте теперь ответим на вопрос: «зачем веб-мастеру или веб-разработчику понимать концепцию взаимодействия клиент-сервер?». Ответ, естественно, очевиден. Чтобы что-то делать своими руками нужно понимать, как это работает. Чтобы сделать сайт и, чтобы он правильно работал в сети Интернет или хотя бы просто работал, нам нужно понимать, как работает сеть Интернет.

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

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

Архитектура «клиент-сервер»

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

Существует два вида архитектуры взаимодействия клиент-сервер: первый получил название двухзвенная архитектура клиент-серверного взаимодействия, второй – многоуровневая архитектура клиент-сервер (иногда его называют трехуровневая архитектура или трехзвенная архитектура, но это частный случай).

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

Двухуровневая модель взаимодействия клиент-сервер

Здесь четко видно, что есть клиент (1-ый уровень), который позволяет человеку сделать запрос, и есть сервер, который обрабатывает запрос клиента.

Если говорить про многоуровневую архитектуру взаимодействия клиент-сервер, то в качестве примера можно привести любую современную СУБД (за исключением, наверное, библиотеки SQLite, которая в принципе не использует концепцию клиент-сервер). Суть многоуровневой архитектуры заключается в том, что запрос клиента обрабатывается сразу несколькими серверами. Такой подход позволяет значительно снизить нагрузку на сервер из-за того, что происходит распределение операций, но в то же самое время данный подход не такой надежный, как двухзвенная архитектура. На рисунке ниже вы можете увидеть пример многоуровневой архитектуры клиент-сервер.

Многоуровневая архитектура взаимодействия клиент-сервер

Типичный пример трехуровневой модели клиент-сервер. Если говорить в контексте систем управления базами данных, то первый уровень – это клиент, который позволяет нам писать различные SQL запросы к базе данных. Второй уровень – это движок СУБД, который интерпретирует запросы и реализует взаимодействие между клиентом и файловой системой, а третий уровень – это хранилище данных.

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

Преимущества и недостатки архитектуры клиент-сервер

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

К недостаткам модели взаимодействия клиент-сервер можно отнести то, что стоимость серверного оборудования значительно выше клиентского. Сервер должен обслуживать специально обученный и подготовленный человек. Если в локальной сети ложится сервер, то и клиенты не смогут работать (в качестве частного случая можно привести пример: мощности сервера не всегда хватает, чтобы удовлетворит запросы клиентов, если вы хоть раз работали с биллинговыми системами, то понимаете о чем я: время ожидания ответа от сервера может быть очень большим).

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

Руководство по API концентраторов ASP.NET SignalR — Server (C#) ASP.NET SignalR Hubs API Guide — Server (C#)

Эта документация не для последней версии SignalR. This documentation isn’t for the latest version of SignalR. Взгляните на ASP.NET Core SignalR. Take a look at ASP.NET Core SignalR.

Этот документ содержит общие сведения о программировании серверной части API концентраторов SignalR ASP.NET для SignalR версии 2, примеры программного кода, демонстрирующий общих параметров. This document provides an introduction to programming the server side of the ASP.NET SignalR Hubs API for SignalR version 2, with code samples demonstrating common options.

API концентраторов SignalR позволяет вам выбрать удаленные вызовы процедур (RPC), с сервера подключенным клиентам и от клиентов к серверу. The SignalR Hubs API enables you to make remote procedure calls (RPCs) from a server to connected clients and from clients to the server. В серверном коде определяют методы, которые могут быть вызваны клиентов и вызывать методы, которые выполняются на клиенте. In server code, you define methods that can be called by clients, and you call methods that run on the client. В клиентском коде определяют методы, которые могут вызываться с сервера и вызывать методы, которые выполняются на сервере. In client code, you define methods that can be called from the server, and you call methods that run on the server. SignalR берет на себя все необходимое для вас клиент сервер. SignalR takes care of all of the client-to-server plumbing for you.

SignalR также предлагает API низкого уровня, вызывается постоянные подключения. SignalR also offers a lower-level API called Persistent Connections. Введение в SignalR, концентраторы и постоянные подключения, см. в разделе введение в SignalR 2. For an introduction to SignalR, Hubs, and Persistent Connections, see Introduction to SignalR 2.

Версии программного обеспечения, используемого в этом разделе Software versions used in this topic

  • Visual Studio 2013 Visual Studio 2013
  • .NET 4.5 .NET 4.5
  • SignalR версии 2 SignalR version 2


Версии раздела Topic versions

Сведения о более ранних версий SignalR, см. в разделе более старых версий SignalR. For information about earlier versions of SignalR, see SignalR Older Versions.

Вопросы и комментарии Questions and comments

Оставьте свои отзывы на том, как вам понравилось, и этот учебник и что можно улучшить в комментариях в нижней части страницы. Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. Если у вас есть вопросы, которые не имеют отношения к руководству, их можно разместить форум по ASP.NET SignalR или StackOverflow.com. If you have questions that are not directly related to the tutorial, you can post them to the ASP.NET SignalR forum or StackOverflow.com.

Обзор Overview

Этот документ содержит следующие разделы. This document contains the following sections:

Документацию о том, как клиенты программы см. следующие ресурсы: For documentation on how to program clients, see the following resources:

Серверные компоненты для SignalR 2 доступны только в .NET 4.5. The server components for SignalR 2 are only available in .NET 4.5. Серверы под управлением .NET 4.0 необходимо использовать версии 1.х SignalR. Servers running .NET 4.0 must use SignalR v1.x.

Как зарегистрировать по промежуточного слоя SignalR How to register SignalR middleware

Чтобы определить маршрут, который будет использоваться клиентами для подключения к центру, вызовите MapSignalR метод при запуске приложения. To define the route that clients will use to connect to your Hub, call the MapSignalR method when the application starts. MapSignalR — метод расширения для OwinExtensions класса. MapSignalR is an extension method for the OwinExtensions class. В следующем примере показано определение концентраторов SignalR маршрут, используя класс запуска OWIN. The following example shows how to define the SignalR Hubs route using an OWIN startup class.

Функциональные возможности SignalR при добавлении в приложение ASP.NET MVC, убедитесь, что раньше, чем другие маршруты добавляется маршрут SignalR. If you are adding SignalR functionality to an ASP.NET MVC application, make sure that the SignalR route is added before the other routes. Дополнительные сведения см. в статье Руководство Начало работы с SignalR 2 и MVC 5. For more information, see Tutorial: Getting Started with SignalR 2 and MVC 5.

URL-адрес /signalr The /signalr URL

По умолчанию является URL-адрес маршрута, который клиенты будут использовать для подключения к центру «/ signalr». By default, the route URL which clients will use to connect to your Hub is «/signalr». (Не путайте этот URL-адрес с URL-адрес «/ signalr/концентраторы», который является для автоматически создаваемого файла JavaScript. (Don’t confuse this URL with the «/signalr/hubs» URL, which is for the automatically generated JavaScript file. Дополнительные сведения о созданном прокси, см. в разделе руководство по API концентраторов SignalR — клиент JavaScript — созданный прокси и что он делает для вас.) For more information about the generated proxy, see SignalR Hubs API Guide — JavaScript Client — The generated proxy and what it does for you.)

Могут возникнуть непредвиденные обстоятельства, которые делают этот базовый URL-адрес не может использоваться для SignalR; Например, у вас есть папка в проекте с именем signalr и вы не хотите изменить имя. There might be extraordinary circumstances that make this base URL not usable for SignalR; for example, you have a folder in your project named signalr and you don’t want to change the name. В этом случае можно изменить базовый URL-адрес, как показано в следующих примерах (Замените «/ signalr» в образце кода с нужный URL-адрес). In that case, you can change the base URL, as shown in the following examples (replace «/signalr» in the sample code with your desired URL).

Код сервера, который указывает URL-адрес Server code that specifies the URL

Клиентский код JavaScript, который указывает URL-адрес (с помощью созданного прокси-сервер) JavaScript client code that specifies the URL (with the generated proxy)

Клиентский код JavaScript, который указывает URL-адрес (без созданный прокси-сервера) JavaScript client code that specifies the URL (without the generated proxy)

Код клиента .NET, который указывает URL-адрес .NET client code that specifies the URL

Настройка параметров SignalR Configuring SignalR Options

Перегруженные версии MapSignalR метод дают возможность задать пользовательский URL-адрес сопоставителя пользовательскую зависимость и следующие параметры: Overloads of the MapSignalR method enable you to specify a custom URL, a custom dependency resolver, and the following options:

Разрешить междоменные вызовы, с помощью CORS и JSONP из клиентского обозревателя. Enable cross-domain calls using CORS or JSONP from browser clients.

Обычно если браузер загружает страницу из http://contoso.com , подключении SignalR находится в том же домене, в http://contoso.com/signalr . Typically if the browser loads a page from http://contoso.com , the SignalR connection is in the same domain, at http://contoso.com/signalr . Если страницы от http://contoso.com подключается к http://fabrikam.com/signalr , то есть соединение между доменами. If the page from http://contoso.com makes a connection to http://fabrikam.com/signalr , that is a cross-domain connection. По соображениям безопасности подключений между доменами отключены по умолчанию. For security reasons, cross-domain connections are disabled by default. Дополнительные сведения см. в разделе ASP.NET руководство по API концентраторов SignalR — клиент JavaScript — как для установления соединения между доменами. For more information, see ASP.NET SignalR Hubs API Guide — JavaScript Client — How to establish a cross-domain connection.

Включите подробные сообщения об ошибках. Enable detailed error messages.

При возникновении ошибок, для отправки клиентам сообщение уведомления без подробной информации о произошедшее является поведение по умолчанию SignalR. When errors occur, the default behavior of SignalR is to send to clients a notification message without details about what happened. Отправки клиентам подробные сведения об ошибке в рабочей среде, не рекомендуется, поскольку пользователи-злоумышленники, можно использовать информацию в атаки, направленные на приложение. Sending detailed error information to clients is not recommended in production, because malicious users might be able to use the information in attacks against your application. Для устранения неполадок, можно использовать этот параметр временно включить более информативные отчеты об ошибках. For troubleshooting, you can use this option to temporarily enable more informative error reporting.

Отключите автоматически созданные файлы прокси JavaScript. Disable automatically generated JavaScript proxy files.

По умолчанию файл JavaScript с прокси-серверы для классов концентратор создается в ответ на URL-адрес «/ signalr/концентраторы». By default, a JavaScript file with proxies for your Hub classes is generated in response to the URL «/signalr/hubs». Если вы не хотите использовать прокси-серверы JavaScript, или если вы хотите создать этот файл вручную и ссылаться на физическом файле в ваших клиентов, можно использовать этот параметр, чтобы отключить создание прокси-сервера. If you don’t want to use the JavaScript proxies, or if you want to generate this file manually and refer to a physical file in your clients, you can use this option to disable proxy generation. Дополнительные сведения см. в разделе руководство по API концентраторов SignalR — клиент JavaScript — прокси, созданного как создать физический файл для SignalR. For more information, see SignalR Hubs API Guide — JavaScript Client — How to create a physical file for the SignalR generated proxy.

Приведенный ниже показано, как указать URL-адрес подключения SignalR и эти параметры в вызове MapSignalR метод. The following example shows how to specify the SignalR connection URL and these options in a call to the MapSignalR method. Чтобы задать пользовательский URL-адрес, замените «/ signalr» в примере с URL-адрес, который вы хотите использовать. To specify a custom URL, replace «/signalr» in the example with the URL that you want to use.

Как создать и использовать классы концентратора How to create and use Hub classes

Чтобы создать концентратор, создайте класс, производный от Microsoft.Aspnet.Signalr.Hub. To create a Hub, create a class that derives from Microsoft.Aspnet.Signalr.Hub. В следующем примере показан простой класс концентратора для приложения разговора. The following example shows a simple Hub class for a chat application.

В этом примере подключенный клиент может вызвать NewContosoChatMessage метод, и когда это происходит, данные, полученные широковещательная рассылка на всех подключенных клиентов. In this example, a connected client can call the NewContosoChatMessage method, and when it does, the data received is broadcasted to all connected clients.

Время жизни объекта концентратора Hub object lifetime

Не создавать экземпляр класса концентратора или вызывать его методы из собственного кода на сервере; все это выполняется автоматически конвейером концентраторов SignalR. You don’t instantiate the Hub class or call its methods from your own code on the server; all that is done for you by the SignalR Hubs pipeline. SignalR создает новый экземпляр класса концентратора каждый раз, когда оно будет обрабатывать операции концентратора, например когда клиент подключается, отключается или выполняет вызов метода к серверу. SignalR creates a new instance of your Hub class each time it needs to handle a Hub operation such as when a client connects, disconnects, or makes a method call to the server.

Так как экземпляры класса концентратора являются временными, их нельзя использовать для поддержания состояния от одного вызова метода к другому. Because instances of the Hub class are transient, you can’t use them to maintain state from one method call to the next. Каждый раз, сервер получает вызов метода из клиента, новый экземпляр класса процессов центра сообщения. Each time the server receives a method call from a client, a new instance of your Hub class processes the message. Для поддержания состояния, через несколько подключений и вызовы методов, использовать другой метод, например базы данных или статической переменной на класс концентратора или другого класса, который является производным от Hub . To maintain state through multiple connections and method calls, use some other method such as a database, or a static variable on the Hub class, or a different class that does not derive from Hub . Если сохранить данные в памяти, с помощью метода, например в статической переменной класса концентратора, данные будут потеряны при очистке домена приложения. If you persist data in memory, using a method such as a static variable on the Hub class, the data will be lost when the app domain recycles.

Если вы хотите отправлять сообщения на клиентах из собственного кода, запускаемый за пределами классу Hub, это нельзя сделать, создание экземпляра класса концентратора, но это можно сделать, получив ссылку на объект контекста SignalR для класса концентратора. If you want to send messages to clients from your own code that runs outside the Hub class, you can’t do it by instantiating a Hub class instance, but you can do it by getting a reference to the SignalR context object for your Hub class. Дополнительные сведения см. в разделе как вызывать методы клиента и управлять ими групп за пределами классу Hub далее в этом разделе. For more information, see How to call client methods and manage groups from outside the Hub class later in this topic.

Венгерской имена центров в клиентах JavaScript Camel-casing of Hub names in JavaScript clients

По умолчанию клиенты JavaScript ссылаются концентраторов с использованием версии стиле Camel имени класса. By default, JavaScript clients refer to Hubs by using a camel-cased version of the class name. SignalR автоматически делает это изменение, чтобы код JavaScript может соответствовать соглашениям JavaScript. SignalR automatically makes this change so that JavaScript code can conform to JavaScript conventions. Предыдущий пример будет называться contosoChatHub в коде JavaScript. The previous example would be referred to as contosoChatHub in JavaScript code.

Сервер Server

С помощью созданного прокси клиента JavaScript JavaScript client using generated proxy

Если вы хотите указать другое имя для клиентов для использования, добавьте HubName атрибута. If you want to specify a different name for clients to use, add the HubName attribute. При использовании HubName атрибут, никак не изменяется имя в стиль Camel в клиентах JavaScript. When you use a HubName attribute, there is no name change to camel case on JavaScript clients.

Сервер Server

С помощью созданного прокси клиента JavaScript JavaScript client using generated proxy

Несколько концентраторов Multiple Hubs

Можно определить несколько классов концентратора в приложении. You can define multiple Hub classes in an application. При этом общий доступ к подключению, но отделены групп: When you do that, the connection is shared but groups are separate:

Все клиенты будут использовать же URL-адрес для подключения SignalR с вашей службой («/ signalr» или пользовательский URL-адрес, если вы ее указали), и что соединение используется для всех концентраторов, определенной службой. All clients will use the same URL to establish a SignalR connection with your service («/signalr» or your custom URL if you specified one), and that connection is used for all Hubs defined by the service.

Нет никакой разницы производительности для нескольких центров, по сравнению с определение все функциональные возможности центра в одном классе. There is no performance difference for multiple Hubs compared to defining all Hub functionality in a single class.

Все центры получить те же сведения запроса HTTP. All Hubs get the same HTTP request information.

Так как все концентраторы используют то же подключение, только сведения о запросе HTTP, сервер возвращает становится поставляются в исходном запросе HTTP, который устанавливает соединение SignalR. Since all Hubs share the same connection, the only HTTP request information that the server gets is what comes in the original HTTP request that establishes the SignalR connection. Если запрос на подключение используется для передачи данных из клиента на сервер, указав строку запроса, не может предоставить различные строки запроса для разных концентраторов. If you use the connection request to pass information from the client to the server by specifying a query string, you can’t provide different query strings to different Hubs. Все концентраторы будут получать те же сведения. All Hubs will receive the same information.

Созданный файл прокси JavaScript будет содержать учетные записи-посредники для всех концентраторов в одном файле. The generated JavaScript proxies file will contain proxies for all Hubs in one file.

Группы определяются в пределах концентраторов. Groups are defined within Hubs.

В SignalR, которые можно определить именованные группы, чтобы вещать на подмножества подключенных клиентов. In SignalR you can define named groups to broadcast to subsets of connected clients. Группы поддерживаются отдельно для каждого центра. Groups are maintained separately for each Hub. Например, группу с именем «Администраторы» будет включать в себя набор клиентов для вашего ContosoChatHub класс и имя группы ссылаетесь на другой набор клиентов для вашего StockTickerHub класса. For example, a group named «Administrators» would include one set of clients for your ContosoChatHub class, and the same group name would refer to a different set of clients for your StockTickerHub class.

Концентраторы со строгой типизацией Strongly-Typed Hubs

Определение интерфейса для своих методов концентратора, которые клиент может ссылки (и включить Intellisense в методах hub), являются производными вашего концентратора Hub (впервые представлено в SignalR 2.1) вместо Hub : To define an interface for your hub methods that your client can reference (and enable Intellisense on your hub methods), derive your hub from Hub (introduced in SignalR 2.1) rather than Hub :

Как определить методы в классе концентратора, который клиенты могут вызывать How to define methods in the Hub class that clients can call

Чтобы предоставить метод на концентраторе, который будет вызываться из клиента, объявите открытый метод, как показано в следующих примерах. To expose a method on the Hub that you want to be callable from the client, declare a public method, as shown in the following examples.

Можно указать тип возвращаемого значения и параметры, включая сложные типы и массивы, как это делается в любом методе C#. You can specify a return type and parameters, including complex types and arrays, as you would in any C# method. Любые данные, которые вы получаете в параметрах или возвращать вызывающей стороне передается между клиентом и сервером с помощью JSON и SignalR обрабатывает привязки сложных объектов и массивов объектов автоматически. Any data that you receive in parameters or return to the caller is communicated between the client and the server by using JSON, and SignalR handles the binding of complex objects and arrays of objects automatically.

Венгерской имена методов в клиентах JavaScript Camel-casing of method names in JavaScript clients

По умолчанию клиенты JavaScript ссылаются методов концентратора с помощью версии стиле Camel имени метода. By default, JavaScript clients refer to Hub methods by using a camel-cased version of the method name. SignalR автоматически делает это изменение, чтобы код JavaScript может соответствовать соглашениям JavaScript. SignalR automatically makes this change so that JavaScript code can conform to JavaScript conventions.

Сервер Server

С помощью созданного прокси клиента JavaScript JavaScript client using generated proxy

Если вы хотите указать другое имя для клиентов для использования, добавьте HubMethodName атрибута. If you want to specify a different name for clients to use, add the HubMethodName attribute.

Сервер Server

С помощью созданного прокси клиента JavaScript JavaScript client using generated proxy

Когда следует выполнить асинхронно When to execute asynchronously

Если метод будет иметь долго выполняющиеся или должен работать будет включать оповещения, такие как поиск в базе данных или вызов веб-службы, сделать асинхронного метода концентратора, возвращая задачи (вместо void возврата) или Задача объектов (вместо T тип возвращаемого значения). If the method will be long-running or has to do work that would involve waiting, such as a database lookup or a web service call, make the Hub method asynchronous by returning a Task (in place of void return) or Task object (in place of T return type). При возврате Task ожидает объект из метода, SignalR Task для завершения, а затем отправляет без оболочки результат обратно клиенту, поэтому нет никакой разницы в как кода вызов метода в клиенте. When you return a Task object from the method, SignalR waits for the Task to complete, and then it sends the unwrapped result back to the client, so there is no difference in how you code the method call in the client.

Что делает метод концентратора на асинхронных позволяет избежать блокирует подключения, когда используется транспорт WebSocket. Making a Hub method asynchronous avoids blocking the connection when it uses the WebSocket transport. Когда метод концентратора выполняется синхронно и транспортом является WebSocket, последующие вызовы методов концентратора от одного клиента блокируются до завершения метода концентратора. When a Hub method executes synchronously and the transport is WebSocket, subsequent invocations of methods on the Hub from the same client are blocked until the Hub method completes.

В следующем примере показано, тот же метод в коде выполняются синхронно или асинхронно, а затем клиентский код JavaScript, подходящий для вызова любой из версий. The following example shows the same method coded to run synchronously or asynchronously, followed by JavaScript client code that works for calling either version.

Синхронный Synchronous

Асинхронный Asynchronous

С помощью созданного прокси клиента JavaScript JavaScript client using generated proxy

Дополнительные сведения о способах использования асинхронных методов в ASP.NET 4.5 см. в разделе использование асинхронных методов в ASP.NET MVC 4. For more information about how to use asynchronous methods in ASP.NET 4.5, see Using Asynchronous Methods in ASP.NET MVC 4.

Определение перегрузки Defining Overloads

Если вы хотите определить перегрузок для метода, число параметров в каждой перегрузке должны быть разными. If you want to define overloads for a method, the number of parameters in each overload must be different. Если отличить перегрузку, просто указав разные типы параметров, ваш класс концентратора скомпилируется, но служба SignalR приведет к возникновению исключения во время выполнения, когда клиенты пытаются для вызова одной из перегрузок. If you differentiate an overload just by specifying different parameter types, your Hub class will compile but the SignalR service will throw an exception at run time when clients try to call one of the overloads.

Отчеты о ходе выполнения из вызовы методов концентратора Reporting progress from hub method invocations

SignalR 2.1 добавлена поддержка шаблон отчета о состоянии появился в .NET 4.5. SignalR 2.1 adds support for the progress reporting pattern introduced in .NET 4.5. Чтобы реализовать отчетов о ходе выполнения, определять IProgress параметра для метода концентратора, которые для клиента: To implement progress reporting, define an IProgress parameter for your hub method that your client can access:

При написании метода server выполняющейся длительное время, важно использовать шаблон асинхронного программирования как Async / Await вместо блокировки потока концентратора. When writing a long-running server method, it is important to use an asynchronous programming pattern like Async/ Await rather than blocking the hub thread.

Порядок вызова методов клиента от концентратора класса How to call client methods from the Hub class

Чтобы вызвать методы клиента с сервера, используйте Clients свойство в метод в классе концентратора. To call client methods from the server, use the Clients property in a method in your Hub class. В следующем примере показано код сервера, который вызывает addNewMessageToPage на всех подключенных клиентах и код клиента, который определяет метод, в клиенте JavaScript. The following example shows server code that calls addNewMessageToPage on all connected clients, and client code that defines the method in a JavaScript client.

Сервер Server

Вызов метода клиента представляет собой асинхронную операцию и возвращает Task . Invoking a client method is an asynchronous operation and returns a Task . Используйте await : Use await :

  • Чтобы убедиться, сообщение отправляется без ошибок. To ensure the message is sent without error.
  • Чтобы включить перехват и обработка ошибок в блоке try-catch. To enable catching and handling errors in a try-catch block.

С помощью созданного прокси клиента JavaScript JavaScript client using generated proxy

Не удается получить значение, возвращаемое из метода клиента; синтаксис, такие как int x = Clients.All.add(1,1) не работает. You can’t get a return value from a client method; syntax such as int x = Clients.All.add(1,1) does not work.

Можно указать сложные типы и массивы параметров. You can specify complex types and arrays for the parameters. В следующем примере передается сложный тип клиенту в параметре метода. The following example passes a complex type to the client in a method parameter.

Код сервера, который вызывает клиентский метод, с помощью сложного объекта Server code that calls a client method using a complex object

Код сервера, который определяет сложный объект Server code that defines the complex object

С помощью созданного прокси клиента JavaScript JavaScript client using generated proxy

Выбор клиентов, которые будут получать RPC Selecting which clients will receive the RPC

Это свойство возвращает клиентов HubConnectionContext объект, который предоставляет несколько вариантов для указания, какие клиенты будут получать RPC: The Clients property returns a HubConnectionContext object that provides several options for specifying which clients will receive the RPC:

Все подключенные клиенты. All connected clients.

Вызывающий клиент. Only the calling client.

Все клиенты, кроме вызывающего клиента. All clients except the calling client.

Конкретного клиента, определяемого по идентификатору подключения. A specific client identified by connection ID.

В этом примере вызывается addContosoChatMessageToPage вызывающему клиенту и имеет тот же эффект, как с помощью Clients.Caller . This example calls addContosoChatMessageToPage on the calling client and has the same effect as using Clients.Caller .

Все подключенные клиенты, кроме указанным клиентам, идентифицируемый идентификатор соединения. All connected clients except the specified clients, identified by connection ID.

Все подключенные клиенты в указанной группе. All connected clients in a specified group.

Все подключенные клиенты в указанной группе, кроме указанным клиентам, идентифицируемый идентификатор соединения. All connected clients in a specified group except the specified clients, identified by connection ID.

Все подключенные клиенты в указанной группе, кроме вызывающего клиента. All connected clients in a specified group except the calling client.

Пользователь, определяемый userId. A specific user, identified by userId.

По умолчанию, это IPrincipal.Identity.Name , но его можно изменить, регистрации реализацию IUserIdProvider глобального узла. By default, this is IPrincipal.Identity.Name , but this can be changed by registering an implementation of IUserIdProvider with the global host.

Все клиенты и группы в списке идентификаторов подключений. All clients and groups in a list of connection IDs.

Список групп. A list of groups.

Пользователь по имени. A user by name.

Список имен пользователей (впервые представлено в SignalR 2.1). A list of user names (introduced in SignalR 2.1).

Имена методов не проверяются во время компиляции No compile-time validation for method names

Имя метода, указать интерпретируется как динамический объект, это означает, что нет IntelliSense или проверку во время компиляции. The method name that you specify is interpreted as a dynamic object, which means there is no IntelliSense or compile-time validation for it. Выражение вычисляется во время выполнения. The expression is evaluated at run time. При выполнении вызова метода, SignalR отправляет имя метода и значения параметров клиента, а если клиент имеет метод, совпадающий с именем, что метод вызывается и значения параметров передаются в него. When the method call executes, SignalR sends the method name and the parameter values to the client, and if the client has a method that matches the name, that method is called and the parameter values are passed to it. Если отсутствует соответствующий метод находится на стороне клиента, ошибка не возникает. If no matching method is found on the client, no error is raised. Сведения о формате данных, SignalR передает клиенту за кулисами при вызове метода клиента, см. в разделе введение в SignalR. For information about the format of the data that SignalR transmits to the client behind the scenes when you call a client method, see Introduction to SignalR.

Совпадение имен метода, без учета регистра Case-insensitive method name matching

Совпадение имен метод не учитывает регистр. Method name matching is case-insensitive. Например Clients.All.addContosoChatMessageToPage будет выполняться на сервере AddContosoChatMessageToPage , addcontosochatmessagetopage , или addContosoChatMessageToPage на стороне клиента. For example, Clients.All.addContosoChatMessageToPage on the server will execute AddContosoChatMessageToPage , addcontosochatmessagetopage , or addContosoChatMessageToPage on the client.

Асинхронное выполнение Asynchronous execution

Асинхронно выполняет метод, который вы вызываете. The method that you call executes asynchronously. Любой код, который после вызова метода клиенту начинается немедленно без ожидания SignalR для завершения передачи данных для клиентов в том случае, если не указано, в последующих строках кода следует подождать завершения метода. Any code that comes after a method call to a client will execute immediately without waiting for SignalR to finish transmitting data to clients unless you specify that the subsequent lines of code should wait for method completion. В следующем примере кода показано, как для последовательного выполнения двух методов клиента. The following code example shows how to execute two client methods sequentially.

С помощью Await (.NET 4.5) Using Await (.NET 4.5)

Если вы используете await подождать, пока клиентский метод завершения до выполнения следующей строке кода, это не означает, что клиенты фактически будут получать сообщение перед выполнением следующей строке кода. If you use await to wait until a client method finishes before the next line of code executes, that does not mean that clients will actually receive the message before the next line of code executes. «Дополнение» клиентского вызова метода только означает, что SignalR выполняться все компоненты, необходимые для отправки сообщения. «Completion» of a client method call only means that SignalR has done everything necessary to send the message. Если вам нужна проверка, что клиенты получили сообщение, вам нужно программировать этот механизм самостоятельно. If you need verification that clients received the message, you have to program that mechanism yourself. Например, вы кода MessageReceived метод на концентраторе и в addContosoChatMessageToPage метод на стороне клиента, можно вызвать MessageReceived после выполнения работа вам нужно сделать на стороне клиента. For example, you could code a MessageReceived method on the Hub, and in the addContosoChatMessageToPage method on the client you could call MessageReceived after you do whatever work you need to do on the client. В MessageReceived концентратора можно делать любые зависят от фактического клиентского приема и обработки исходного вызова метода. In MessageReceived in the Hub you can do whatever work depends on actual client reception and processing of the original method call.


Использование строковой переменной в качестве имени метода How to use a string variable as the method name

Если вы хотите вызвать клиентский метод, используя строковую переменную в качестве имени метода, приведение Clients.All (или Clients.Others , Clients.Caller т. д.) для IClientProxy , а затем вызвать Invoke (methodName, args. ) . If you want to invoke a client method by using a string variable as the method name, cast Clients.All (or Clients.Others , Clients.Caller , etc.) to IClientProxy and then call Invoke(methodName, args. ).

Как управлять членством в группах от класса концентратора How to manage group membership from the Hub class

Группами в SignalR предоставляют метод широковещательная рассылка сообщений для заданного подмножества подключенных клиентов. Groups in SignalR provide a method for broadcasting messages to specified subsets of connected clients. Группа может иметь любое число клиентов, и клиент может быть членом любое количество групп. A group can have any number of clients, and a client can be a member of any number of groups.

Чтобы управлять членством в группах, используйте добавить и удалить методы, предоставляемые Groups свойство класса концентратора. To manage group membership, use the Add and Remove methods provided by the Groups property of the Hub class. В следующем примере показан Groups.Add и Groups.Remove методы, используемые в методах Hub, которые вызываются в клиентском коде, следуют клиентского кода JavaScript, который вызывает их. The following example shows the Groups.Add and Groups.Remove methods used in Hub methods that are called by client code, followed by JavaScript client code that calls them.

Сервер Server

С помощью созданного прокси клиента JavaScript JavaScript client using generated proxy

Не нужно явно создавать группы. You don’t have to explicitly create groups. Фактически группа автоматически создается первый раз, укажите его имя в вызове Groups.Add , и она будет удалена при удалении последнего соединения из членства в ней. In effect a group is automatically created the first time you specify its name in a call to Groups.Add , and it is deleted when you remove the last connection from membership in it.

Не существует API для получения списка членства в группе или список групп. There is no API for getting a group membership list or a list of groups. SignalR отправляет сообщения клиентам и группам на основе модели публикации и подписки, и сервер не ведет список групп или членства в группах. SignalR sends messages to clients and groups based on a pub/sub model, and the server does not maintain lists of groups or group memberships. Это помогает добиться максимальной масштабируемости, так как каждый раз при добавлении узла к веб-ферме, любое состояние, которое поддерживает SignalR должен быть распространены на новый узел. This helps maximize scalability, because whenever you add a node to a web farm, any state that SignalR maintains has to be propagated to the new node.

Асинхронное выполнение методов Add и Remove Asynchronous execution of Add and Remove methods

Groups.Add И Groups.Remove методы асинхронного выполнения. The Groups.Add and Groups.Remove methods execute asynchronously. Если вы хотите добавить в клиент группу и немедленно отправить клиенту сообщение с помощью в группу, необходимо убедиться, что Groups.Add метод завершается первой. If you want to add a client to a group and immediately send a message to the client by using the group, you have to make sure that the Groups.Add method finishes first. В следующем примере кода показано, как это сделать. The following code example shows how to do that.

Добавление клиента в группу и затем обмена сообщениями этого клиента Adding a client to a group and then messaging that client

Сохраняемость членство группы Group membership persistence

SignalR отслеживает подключений, которые не пользователей, поэтому, если пользователь должны находиться в той же группе каждый раз, когда пользователь выполняет подключение, должен быть вызван Groups.Add каждый раз, он устанавливает новое подключение. SignalR tracks connections, not users, so if you want a user to be in the same group every time the user establishes a connection, you have to call Groups.Add every time the user establishes a new connection.

После временной потери связи иногда SignalR можно восстановить подключение автоматически. After a temporary loss of connectivity, sometimes SignalR can restore the connection automatically. В этом случае SignalR восстановление одно и то же подключение, не создания нового подключения, и таким образом, членство в группе клиента восстанавливается автоматически. In that case, SignalR is restoring the same connection, not establishing a new connection, and so the client’s group membership is automatically restored. Это возможно даже в том случае, если временный разрыв не в результате перезагрузки сервера или сбой, так как состояние подключения для каждого клиента, включая членство в группах, обхода клиенту. This is possible even when the temporary break is the result of a server reboot or failure, because connection state for each client, including group memberships, is round-tripped to the client. Если сервер выйдет из строя и заменяется на новый сервер до истечения времени ожидания соединения, клиент можно автоматически повторно подключиться к новому серверу и повторно зарегистрировать в группах, в которых он участвует. If a server goes down and is replaced by a new server before the connection times out, a client can reconnect automatically to the new server and re-enroll in groups it is a member of.

Если соединение невозможно восстановить автоматически после потери подключения, или когда время ожидания соединения или при отключении клиента (например, когда браузер переходит на новую страницу), членства в группах, будут потеряны. When a connection can’t be restored automatically after a loss of connectivity, or when the connection times out, or when the client disconnects (for example, when a browser navigates to a new page), group memberships are lost. При очередном подключении будет новое соединение. The next time the user connects will be a new connection. Для обеспечения членства в группах при тот же пользователь устанавливает новое соединение, приложение должно отслеживать связи между пользователями и группами и восстановление членства в группах каждый раз, пользователь устанавливает новое соединение. To maintain group memberships when the same user establishes a new connection, your application has to track the associations between users and groups, and restore group memberships each time a user establishes a new connection.

Дополнительные сведения о подключениях и переподключения см. в разделе способ обработки событий времени существования подключений в классе концентратора далее в этом разделе. For more information about connections and reconnections, see How to handle connection lifetime events in the Hub class later in this topic.

Группы в однопользовательском режиме Single-user groups

Приложения, использующие SignalR обычно имеют для отслеживания сопоставлений пользователей и подключений, чтобы знать, какой пользователь отправил сообщение и какие пользователи должны получать сообщения. Applications that use SignalR typically have to keep track of the associations between users and connections in order to know which user has sent a message and which user(s) should be receiving a message. Группы используются в одном из двух часто используемых шаблонов для соответствующей. Groups are used in one of the two commonly used patterns for doing that.

Группы в однопользовательском режиме. Single-user groups.

Можно указать имя пользователя в качестве имени группы и добавить идентификатор текущего подключения к группе, каждый раз пользователь подключается или повторном подключении. You can specify the user name as the group name, and add the current connection ID to the group every time the user connects or reconnects. Для отправки сообщений пользователю отправлять в группу. To send messages to the user you send to the group. Недостатком этого метода является то, что группе не предоставляет вам способ проверить, является ли пользователь интерактивном или автономном режиме. A disadvantage of this method is that the group doesn’t provide you with a way to find out if the user is online or offline.

Отслеживать связи между имена пользователей и идентификаторов подключений. Track associations between user names and connection IDs.

Можно хранить ассоциацию между каждого имени пользователя и один или несколько идентификаторов подключений в словарь или базы данных и обновлять сохраненные данные каждый раз, пользователь подключении или отключении. You can store an association between each user name and one or more connection IDs in a dictionary or database, and update the stored data each time the user connects or disconnects. Для отправки сообщений пользователю указать идентификаторов подключений. To send messages to the user you specify the connection IDs. Недостатком этого метода является то, что занимает больше памяти. A disadvantage of this method is that it takes more memory.

Способ обработки событий времени существования подключений в классе концентратора How to handle connection lifetime events in the Hub class

Типичной причиной для обработки события времени жизни соединения: для отслеживания ли пользователь подключен или не и для отслеживания сопоставление имен пользователей и идентификаторов подключений. Typical reasons for handling connection lifetime events are to keep track of whether a user is connected or not, and to keep track of the association between user names and connection IDs. Для выполнения собственного кода, когда клиенты подключиться или отключиться, переопределите OnConnected , OnDisconnected , и OnReconnected класса виртуальных методов концентратора, как показано в следующем примере. To run your own code when clients connect or disconnect, override the OnConnected , OnDisconnected , and OnReconnected virtual methods of the Hub class, as shown in the following example.

При вызове OnConnected OnDisconnected и OnReconnected When OnConnected, OnDisconnected, and OnReconnected are called

Каждый раз, когда браузер переходит на новую страницу, новое соединение имеет установления, означающее, что будет выполняться SignalR OnDisconnected метода, за которым следует OnConnected метод. Each time a browser navigates to a new page, a new connection has to be established, which means SignalR will execute the OnDisconnected method followed by the OnConnected method. SignalR всегда создает новый идентификатор соединения, если установлено новое соединение. SignalR always creates a new connection ID when a new connection is established.

OnReconnected Метод вызывается в том случае, когда произошел временный разрыв подключения, можно автоматически восстановить SignalR, например когда кабель временно отключен и использовать подключение до истечения времени ожидания соединения. OnDisconnected Метод вызывается в том случае, когда клиент отключен и SignalR невозможностью автоматически, например когда браузер переходит на новую страницу. The OnReconnected method is called when there has been a temporary break in connectivity that SignalR can automatically recover from, such as when a cable is temporarily disconnected and reconnected before the connection times out. The OnDisconnected method is called when the client is disconnected and SignalR can’t automatically reconnect, such as when a browser navigates to a new page. Таким образом, возможно последовательность событий для данного клиента — OnConnected , OnReconnected , OnDisconnected ; или OnConnected , OnDisconnected . Therefore, a possible sequence of events for a given client is OnConnected , OnReconnected , OnDisconnected ; or OnConnected , OnDisconnected . Вы не увидите последовательность OnConnected , OnDisconnected , OnReconnected для данного соединения. You won’t see the sequence OnConnected , OnDisconnected , OnReconnected for a given connection.

OnDisconnected Метод не вызывается в некоторых сценариях, например если сервер выйдет из строя или домен приложения получает перезапущен. The OnDisconnected method doesn’t get called in some scenarios, such as when a server goes down or the App Domain gets recycled. Когда другой сервер переходит в оперативный или домена приложения по завершении его повторный запуск, некоторые клиенты могут иметь возможность повторного подключения и инициировать OnReconnected событий. When another server comes on line or the App Domain completes its recycle, some clients may be able to reconnect and fire the OnReconnected event.

Состояние вызывающего объекта не заполнен Caller state not populated

Методы обработчиков событий времени существования соединения вызываются на сервере, это означает, что любое состояние, которое необходимо поместить в state объекта на стороне клиента не будут указаны в Caller свойство на сервере. The connection lifetime event handler methods are called from the server, which means that any state that you put in the state object on the client will not be populated in the Caller property on the server. Сведения о state объекта и Caller свойство, см. в разделе как для передачи состояния между клиентами и классу Hub далее в этом разделе. For information about the state object and the Caller property, see How to pass state between clients and the Hub class later in this topic.

Как получить сведения о клиенте из контекстного свойства How to get information about the client from the Context property

Чтобы получить сведения о клиенте, используйте Context свойство класса концентратора. To get information about the client, use the Context property of the Hub class. Context Возвращает HubCallerContext объект, который предоставляет доступ к следующим сведениям: The Context property returns a HubCallerContext object which provides access to the following information:

Идентификатор подключения вызывающего клиента. The connection ID of the calling client.

Идентификатор подключения — это GUID, назначенный SignalR (в собственном коде невозможно задать значение). The connection ID is a GUID that is assigned by SignalR (you can’t specify the value in your own code). Есть один идентификатор подключения для каждого подключения и то же подключение, он используется во всех концентраторах, если у вас есть несколько концентраторов в приложении. There is one connection ID for each connection, and the same connection ID is used by all Hubs if you have multiple Hubs in your application.

Данные заголовка HTTP. HTTP header data.

Можно также получить заголовки HTTP из Context.Headers . You can also get HTTP headers from Context.Headers . Причина для нескольких ссылок на тот же том, что Context.Headers была создана, во-первых, Context.Request свойство было добавлено позже, и Context.Headers был сохранен для обратной совместимости. The reason for multiple references to the same thing is that Context.Headers was created first, the Context.Request property was added later, and Context.Headers was retained for backward compatibility.

Запрос данных строки. Query string data.

Можно также получить данные строки запроса из Context.QueryString . You can also get query string data from Context.QueryString .

Строка запроса, которую можно получить в этом свойстве является тот, который использовался с HTTP-запроса, установленного подключения SignalR. The query string that you get in this property is the one that was used with the HTTP request that established the SignalR connection. Можно добавить параметры строки запроса в клиенте, настроив подключения, которая является удобным способом для передачи данных о клиенте от клиента к серверу. You can add query string parameters in the client by configuring the connection, which is a convenient way to pass data about the client from the client to the server. В следующем примере показан один способ добавления строки запроса в клиенте JavaScript, при использовании созданного прокси. The following example shows one way to add a query string in a JavaScript client when you use the generated proxy.

Дополнительные сведения о настройке параметров строки запроса см. в разделе руководства по API для JavaScript и .NET клиентов. For more information about setting query string parameters, see the API guides for the JavaScript and .NET clients.

Вы можете найти метод транспорта, используемый для соединения в данные строки запроса, а также некоторые другие значения, используемые внутри SignalR: You can find the transport method used for the connection in the query string data, along with some other values used internally by SignalR:

Значение transportMethod будет «webSockets», «serverSentEvents», «foreverFrame» или «longPolling». The value of transportMethod will be «webSockets», «serverSentEvents», «foreverFrame» or «longPolling». Обратите внимание, что если вы установите это значение OnConnected метод обработчика событий, в некоторых сценариях может изначально получить значение транспорта, не является методом окончательного согласованного транспорта для подключения. Note that if you check this value in the OnConnected event handler method, in some scenarios you might initially get a transport value that is not the final negotiated transport method for the connection. В этом случае метод вызовет исключение и вызывается позже при установлении метод окончательный транспорта. In that case the method will throw an exception and will be called again later when the final transport method is established.

Файлы cookie. Cookies.

Также можно получить файлы cookie из Context.RequestCookies . You can also get cookies from Context.RequestCookies .

Сведения о пользователе. User information.

Для запроса объекта HttpContext: The HttpContext object for the request :

Используйте этот метод вместо получения HttpContext.Current для получения HttpContext объект для подключения SignalR. Use this method instead of getting HttpContext.Current to get the HttpContext object for the SignalR connection.

Способ передачи состояния между клиентами и классу Hub How to pass state between clients and the Hub class

Предоставляет клиентский прокси state объекта, в котором можно хранить данные, которые могут передаваться на сервер с каждым вызовом метода. The client proxy provides a state object in which you can store data that you want to be transmitted to the server with each method call. На сервере можно получить доступ к данным в Clients.Caller свойство в методах Hub, которые вызываются клиентами. On the server you can access this data in the Clients.Caller property in Hub methods that are called by clients. Clients.Caller Свойство не заполняется для методов обработчиков событий времени существования соединения OnConnected , OnDisconnected , и OnReconnected . The Clients.Caller property is not populated for the connection lifetime event handler methods OnConnected , OnDisconnected , and OnReconnected .

Создание или обновление данных в state объекта и Clients.Caller свойство работает в обоих направлениях. Creating or updating data in the state object and the Clients.Caller property works in both directions. Можно обновить значения на сервере, и они передаются обратно клиенту. You can update values in the server and they are passed back to the client.

В примере показан клиентский код JavaScript, который хранит состояние для передачи на сервер при каждом вызове метода. The following example shows JavaScript client code that stores state for transmission to the server with every method call.

В следующем примере эквивалентный код в клиенте .NET. The following example shows the equivalent code in a .NET client.

В классе концентратора, можно получить доступ к эти данные в Clients.Caller свойство. In your Hub class, you can access this data in the Clients.Caller property. В примере показан код, который получает состояние, в предыдущем примере. The following example shows code that retrieves the state referred to in the previous example.

Этот механизм для сохранения состояния не предназначен для больших объемов данных, так как все, что вы поместите в state или Clients.Caller свойства обхода с каждого вызова метода. This mechanism for persisting state is not intended for large amounts of data, since everything you put in the state or Clients.Caller property is round-tripped with every method invocation. Это полезно для небольших элементов, таких как имена пользователей или счетчики. It’s useful for smaller items such as user names or counters.

В VB.NET или концентратор со строгой типизацией, состояние вызывающий объект не может осуществляться через Clients.Caller ; вместо этого используйте Clients.CallerState (впервые представлено в SignalR 2.1): In VB.NET or in a strongly-typed hub, the caller state object can’t be accessed through Clients.Caller ; instead, use Clients.CallerState (introduced in SignalR 2.1):

С помощью CallerState в C# Using CallerState in C#

С помощью CallerState в Visual Basic Using CallerState in Visual Basic

Способ обработки ошибок в классе концентратора How to handle errors in the Hub class

Для обработки ошибок, возникающих в методах класса концентратора, сначала убедитесь, вы «наблюдать» за любые исключения из асинхронных операций (например, вызов клиентских методов) с помощью await . To handle errors that occur in your Hub class methods, first ensure you «observe» any exceptions from async operations (such as invoking client methods) by using await . Затем можно используйте один или несколько из следующих методов: Then use one or more of the following methods:

Перенос кода метода в блоки try-catch и войдите в объекте исключения. Wrap your method code in try-catch blocks and log the exception object. Для целей отладки исключения можно отправить клиенту, но для обеспечения безопасности причин отправки подробные сведения клиентам в рабочей среде не рекомендуется. For debugging purposes you can send the exception to the client, but for security reasons sending detailed information to clients in production is not recommended.

Создание модуля концентраторов конвейера, который будет обрабатывать OnIncomingError метод. Create a Hubs pipeline module that handles the OnIncomingError method. В следующем примере показано модуль конвейера, который регистрирует ошибки, Далее следует код в файле Startup.cs, который внедряет модуля в конвейере концентраторов. The following example shows a pipeline module that logs errors, followed by code in Startup.cs that injects the module into the Hubs pipeline.

Используйте HubException класс (впервые представлено в SignalR 2). Use the HubException class (introduced in SignalR 2). Эта ошибка может быть создано из любого вызова концентратора. This error can be thrown from any hub invocation. HubError Конструктор принимает строковое сообщение и объект для хранения дополнительные данные ошибки. The HubError constructor takes a string message, and an object for storing extra error data. SignalR будет автоматически сериализации исключения и отправить его клиенту, где он будет использоваться на отклонение или сбой вызова метода концентратора. SignalR will auto-serialize the exception and send it to the client, where it will be used to reject or fail the hub method invocation.

В следующих примерах кода показано, как вызывать HubException во время вызова концентратора и как обрабатывать исключение в клиентах JavaScript и .NET. The following code samples demonstrate how to throw a HubException during a Hub invocation, and how to handle the exception on JavaScript and .NET clients.

Серверный код, демонстрирующий класс HubException Server code demonstrating the HubException class

Клиентский код JavaScript, демонстрации ответа порождение HubException в центре JavaScript client code demonstrating response to throwing a HubException in a hub

.NET клиентского кода, демонстрирующий ответ на вызов HubException в центре .NET client code demonstrating response to throwing a HubException in a hub

Дополнительные сведения о модулях центра конвейера см. в разделе способы настройки конвейера концентраторов далее в этом разделе. For more information about Hub pipeline modules, see How to customize the Hubs pipeline later in this topic.

Включение трассировки How to enable tracing

Чтобы включить трассировку на стороне сервера, добавьте system.diagnostics-элемент в файл Web.config, как показано в следующем примере: To enable server-side tracing, add a system.diagnostics element to your Web.config file, as shown in this example:

При запуске приложения в Visual Studio, можно просмотреть журналы в вывода окна. When you run the application in Visual Studio, you can view the logs in the Output window.

Как вызывать методы клиента и управлять ими групп за пределами классу Hub How to call client methods and manage groups from outside the Hub class

Для вызова методов клиента от другого класса, чем класс концентратора, получить ссылку на объект контекста SignalR для центра и использовать его для вызова методов на стороне клиента и управление группами. To call client methods from a different class than your Hub class, get a reference to the SignalR context object for the Hub and use that to call methods on the client or manage groups.

Следующий пример StockTicker класса возвращает объект контекста, сохраняет его в экземпляр класса, хранит экземпляр класса в статическое свойство и использует контекст из одноэлементный экземпляр класса для вызова updateStockPrice метод на клиентах, которые являются подключение к концентратору с именем StockTickerHub . The following sample StockTicker class gets the context object, stores it in an instance of the class, stores the class instance in a static property, and uses the context from the singleton class instance to call the updateStockPrice method on clients that are connected to a Hub named StockTickerHub .

Если вам нужно использовать время несколько контекста в долгоживущих объектов, получить ссылку на один раз и сохраните его вместо получения его каждый раз. If you need to use the context multiple-times in a long-lived object, get the reference once and save it rather than getting it again each time. Получение контекста один раз гарантирует, что SignalR отправляет сообщения на клиентах в той же последовательности, в которой ваши методы концентратора выполнять клиентские вызовы методов. Getting the context once ensures that SignalR sends messages to clients in the same sequence in which your Hub methods make client method invocations. Учебник, в котором показано, как использовать контекст SignalR для концентратора, см. в разделе передача сообщений с сервера с помощью SignalR. For a tutorial that shows how to use the SignalR context for a Hub, see Server Broadcast with ASP.NET SignalR.

Вызов методов клиента Calling client methods

Можно указать, какие клиенты будут получать RPC, но имеется меньше возможностей, чем при вызове из класса концентратора. You can specify which clients will receive the RPC, but you have fewer options than when you call from a Hub class. Причиной этого является то, что контекст связан не конкретный вызов от клиента, поэтому любые методы, требуется знание текущий идентификатор соединения, такие как Clients.Others , или Clients.Caller , или Clients.OthersInGroup , недоступны. The reason for this is that the context is not associated with a particular call from a client, so any methods that require knowledge of the current connection ID, such as Clients.Others , or Clients.Caller , or Clients.OthersInGroup , are not available. Доступны следующие параметры. The following options are available:

Все подключенные клиенты. All connected clients.

Конкретного клиента, определяемого по идентификатору подключения. A specific client identified by connection ID.

Все подключенные клиенты, кроме указанным клиентам, идентифицируемый идентификатор соединения. All connected clients except the specified clients, identified by connection ID.

Все подключенные клиенты в указанной группе. All connected clients in a specified group.

Все подключенные клиенты в указанной группе, кроме указанным клиентам, идентифицируемый идентификатор соединения. All connected clients in a specified group except specified clients, identified by connection ID.

При вызове в не Hub класс из методов в классе концентратора, вы можете передать в идентификатор текущего соединения и использовать его с Clients.Client , Clients.AllExcept , или Clients.Group для имитации Clients.Caller , Clients.Others , или Clients.OthersInGroup . If you are calling into your non-Hub class from methods in your Hub class, you can pass in the current connection ID and use that with Clients.Client , Clients.AllExcept , or Clients.Group to simulate Clients.Caller , Clients.Others , or Clients.OthersInGroup . В следующем примере MoveShapeHub класс передает идентификатор подключения для Broadcaster класс таким образом, чтобы Broadcaster класса можно имитировать Clients.Others . In the following example, the MoveShapeHub class passes the connection ID to the Broadcaster class so that the Broadcaster class can simulate Clients.Others .

Управление членством в группе Managing group membership

Для управления группами имеют одинаковые параметры, как в класс концентратора. For managing groups you have the same options as you do in a Hub class.

Добавление клиента в группу Add a client to a group

Удаление клиента из группы Remove a client from a group

Настройка конвейера концентраторов How to customize the Hubs pipeline

SignalR позволяет ввести собственный код в конвейер концентратора. SignalR enables you to inject your own code into the Hub pipeline. В следующем примере показано пользовательский модуль конвейер концентратора, который регистрирует каждого входящего вызова метода, полученных от клиента и исходящий вызов метода, вызывается на стороне клиента: The following example shows a custom Hub pipeline module that logs each incoming method call received from the client and outgoing method call invoked on the client:

В следующем коде в Startup.cs файла регистрирует модуль для выполнения в конвейер концентратора: The following code in the Startup.cs file registers the module to run in the Hub pipeline:

Существует множество различных методов, которые можно переопределить. There are many different methods that you can override. Полный список см. в разделе HubPipelineModule методы. For a complete list, see HubPipelineModule Methods.

Сервер Asp.net контролирует тот же порядок обработки событий на стороне сервера/клиента

У меня есть серверный контроль asp.net(с asp: в его определении). Кнопка была настроена для повторной отправки.

На стороне сервера у меня есть обработчик события on click например, btnSave_click()

На стороне клиента у меня есть функция javascript для вызова в событии click например, btnSave.Attributes.Add( «onclick», «javascript: return CheckIsDirty();» )

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

Первая сторона клиента, вторая сторона сервера.

Итак, вы можете использовать его.

Я также использую его в некоторых случаях, например:

В этом случае, если пользователь нажимает «Нет», серверный обработчик событий даже не играет роли.

Трюк здесь заключается в том, чтобы установить эту глобальную переменную «Page_IsValid» false, если ваш тест завершился неудачно, и это остановит отправку сообщения.

Прочтите эту страницу http://msdn.microsoft.com/en-us/library/aa479045.aspx, которая объясняет как проверку на стороне сервера, так и клиента. Существует хороший пример кода, который вы можете использовать.

То, как вы устанавливаете событие onClick JavaScript, фактически предотвратит его отправку, поскольку вы перезаписываете обработчик событий ASP.NET. Правильный способ выполнить проверку, которую вы намереваетесь, заключается в следующем:

Обратите внимание, что вы добавляете результат GetPostBackEventReference, так что в JavaScript вы сначала вызываете свой метод CheckIsDirty(), а затем вызываете метод обратной передачи ASP.NET. Предполагая, что ваш метод возвращает true, кнопка будет публиковать. Если он вернет false, это не приведет к возврату сообщения.

Это похоже на то, что вы пытаетесь выполнить?

Думаю, вам нужно гораздо лучше понять, что значит клиентская сторона, а что означает серверная сторона и как все они связаны друг с другом. Я видел, как все больше и больше разработчиков создают беспорядок.

Конечно, клиентская сторона выполнит сначала в вашем случае. На самом деле нет способа выполнить его после выполнения кода сервера (кроме случаев, когда вы делаете что-то вручную). Я попытаюсь дать краткое объяснение:

Независимо от того, что у вас есть на вашем сервере, вы создадите HTML-код на клиенте, и пользователь всегда будет взаимодействовать с клиентом. Таким образом, у вас есть кнопка html, которую пользователь нажимает. Что браузер сделает, это выполнить связанный с ним javascript или если javascript не указан, а кнопка представляет собой кнопку отправки, она отправит форму. если вы проверите сгенерированный html, вы увидите, что для события onclick у вас будет добавленный script, а затем некоторый автогенерированный script, который фактически отправит форму на сервер. Ваш код на стороне сервера будет выполнен, только если страница будет отправлена.

Клиент-серверная архитектура: особенности взаимодействия

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

Архитектура «Клиент-Сервер» представляет собой взаимодействие структурных компонентов в сети на основе определенных принципов организации данной сети, где структурными компонентами являются сервер и узлы-поставщики определенных специализированных функций (сервисов), а также клиенты, которые пользуются данным сервисом. Специфические функции принято делить на три группы на основе решения определенных задач:

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

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

Клиент-серверная архитектура наиболее часто используется для создания корпоративных баз данных, в которых информация не только хранится, но и периодически поддается обработке различными методами. Именно база данных является главным элементом любой корпоративной информационной системы, а на сервере располагается ядро этой базы. Так, на сервере происходят наиболее сложные операции, касающиеся ввода, хранения, обработки и модификации данных. Когда пользователь (клиент) обращается к базе данных (серверу), происходит обработка запроса: непосредственно обращение к базе данных и возврат ответа (результата обработки). Результат обработки – это сообщение сети об успешном проведении операции или ошибке. Серверные компьютеры могут обрабатывать одновременно обращение нескольких клиентов к одному и тому же файлу. Такая работа и передача данных по сети позволяет ускорить работу используемых приложений.

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

Илон Маск рекомендует:  Отправка файла с указанием сколько загруженноосталось
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Название: Технология Клиент-сервер 3
Раздел: Рефераты по информатике
Тип: реферат Добавлен 00:05:16 17 сентября 2011 Похожие работы
Просмотров: 2794 Комментариев: 12 Оценило: 6 человек Средний балл: 4.7 Оценка: 5 Скачать