Lecture13 (1133570), страница 5
Текст из файла (страница 5)
Конфигурационный файл сервера выглядит так.<?xml version="1.0" encoding="utf-8" ?><configuration><system.runtime.remoting><application><service><wellknownmode = "Singleton"type = "Examples.Remoting.Hello, Hello"objectUri = "MessageServer"/></service><channels><channel ref = "http" port = "8989" /></channels></application></system.runtime.remoting></configuration>Конфигурационный файл клиента.<?xml version="1.0" encoding="utf-8" ?><configuration><system.runtime.remoting><application><client><wellknowntype = "Examples.Remoting.Hello, Hello"url = "http://hostname:8989/MessageServer"/></client></application></system.runtime.remoting></configuration>Чтобы запустить этот пример, нужно выполнить следующие шаги.• Скомпилировать все классы (предполагается, что классы находятся в файлах с именамиHello.cs, Server.cs и Client.cs).csc.exe /noconfig /t:library Hello.cscsc.exe /noconfig /r:Hello.dll Server.cscsc.exe /noconfig /r:Hello.dll Client.cs•В результате первой команды будет получена динамическая библиотека, содержащаяопределение класса Hello.
В двух других она используется, чтобы предоставить ссылку наэтот тип.Запустить серверный компонентServer.exe•Перенести на другую машину или в отдельную директорию на той же машине файлыClient.exe, Hello.dll, RemotingClient.exe.config, заменив hostname в URL вконфигурационном файле клиента на имя машины, где работает сервер, и запуститьклиентский компонентClient.exeЕсли никаких ошибок не сделано, и порт 8989 на серверной машине доступен, клиентвыдаст сообщение.response: Hello!С помощью конфигурационных файлов можно определить политику активации серверногообъекта (использовать один объект для всех вызовов, создавать для каждого вызова свой объект,создавать объект при его создании клиентом), транспортный протокол для передачи сообщений(HTTP или TCP), и пр.Асинхронное взаимодействие в рамках .NET может быть реализовано с помощью имеющихсяв библиотеке .NET асинхронных делегатов, на основе асинхронных удаленных вызовов поRemoting или с помощью обмена сообщениями на базе библиотек System.Messaging.Взаимодействие между компонентами ASP.NET использует похожие, но скрытые отразработчика компонентов механизмы.ИменованиеВ примере на взаимодействие по Remoting использовалась локальная служба именования,встроенная в среду .NET — поэтому никаких специальных действий по регистрации и поискукомпонентов не производилось.
Эта служба позволяет не заботиться об этих вопросах в томслучае, если физическое положение компонентов, с которыми необходимо установить связь,известно и постоянно.Если же это не так, необходимо иметь полноценную службу именования и/или службукаталогов. В этом качестве в .NET используется Active Directory. Поскольку эта технологияпоявилась раньше, чем среда .NET, в рамках .NET была создана библиотека адаптеров,позволяющих использовать функции Active Directory.
Элементы этой библиотеки находятся впространстве имен System.DirectoryServices и его подпространствах, в сборкахSystem.DirectoryServices и System.DirectoryServices.Protocols.Для работы с записями Active Directory используются объекты классаSystem.DirectoryServices.DirectoryEntry. C помощью конструкторов и методов этого классаможно создавать и изменять регистрационные записи службы каталогов. Для поисказарегистрированных объектов по идентификаторам или свойствам используются методы классаSystem.DirectoryServices.DirectorySearcher.Active Directory поддерживает обращения к своим записям по нескольким разным протокола,включая протокол LDAP.Процессы и синхронизацияПомимо процессов и потоков, среда .NET поддерживает так называемые зоны приложений(application domains), которые служат агрегатами ресурсов, как и процессы, но, в отличие от них,управляются с помощью более эффективных механизмов. В рамках одного процесса может бытьсоздано несколько зон приложений.
Передача объектов и ресурсов между зонами приложенийневозможна без использования специальных механизмов, таких как Remoting. Потоки же в .NETмогут пересекать границы зон приложений, если обладают соответствующими правами.Зоны приложений служат дополнительным элементом защиты .NET-приложений отнепреднамеренного взаимного влияния и позволяют сохранить работоспособность процесса привозникновении проблем в одном из его приложений.Помимо автоматически создаваемых потоков и зон приложений, разработчик может создаватьсвои собственные потоки и зоны приложений. Вопросы синхронизации потоков и передачиданных между зонами приложений в Web-приложениях могут решаться при помощи стандартныхмеханизмов .NET — конструкций и библиотек синхронизационных примитивов, а такжебиблиотечного класса System.AppDomain, чьи методы позволяют выполнять различные операции сзонами приложений.ЦелостностьЦелостность данных в .NET поддерживается, как и в J2EE, в основном, за счет механизматранзакций.
Распределенные транзакции в .NET реализованы на базе сервера транзакцийMicrosoft (Microsoft Transaction Server, MTS), который появился как часть компонентной средыCOM+. Интерфейсы для работы с его функциями собраны в пространстве именSystem.EnterpriseServices, в сборке с таким же именем.Автоматические транзакции поддерживаются при помощи указания у классов транзакционныхатрибутов, имеющих тип System.EnterpriseServices.TransactionAttribute.
Такой атрибутможет принимать значения Required, RequiresNew, NotSupported, Supported и Disabled. Первыетри имеют то же значение, что и в J2EE. Атрибут Supported действует аналогично Supports вJ2EE. Атрибут Disabled обозначает, что транзакционный контекст вызвавшего метода будетпроигнорирован.Значение атрибутов по умолчанию для методов компонентов ASP.NET и методов обычныхклассов, используемых в распределенных транзакциях, различны — у первых это Disabled, увторых — Required.Чтобы определить класс, чьи методы могут участвовать в транзакциях, нужно унаследовать егоот класса System.EnterpriseServices.ServicedComponent, определить транзакционный атрибут,а также прикрепить к сборке, содержащей этот класс, сертификат и зарегистрировать сборку вреестре COM+.Для завершения или отката автоматической транзакции используются следующиеконструкции.••Атрибут System.EnterpriseServices.AutoCompleteAttribute у участвующего втранзакции метода говорит о том, что в случае нормального завершения работы метода иотсутствия проблем у других ее участников транзакция будет завершена успешно.
Если жев результате работы метода будет создано исключение, транзакция будет отменена.Методы SetComplete() и SetAbort() класса System.EnterpriseServices.ContextUtilмогут использоваться для успешного завершения или отката автоматически созданнойтранзакции.Создание и управление транзакциями «в ручном режиме» может быть осуществлено длякомпонентов ADO.NET при помощи методов класса System.Data.Common.DbConnection и егонаследников и класса System.Data.Common.DbTransaction. Для управления транзакциями припередаче сообщений используется класс System.Messaging.MessageQueueTransaction.ОтказоустойчивостьТак же, как и для J2EE, отказоустойчивость .NET-приложений должна обеспечиваться либо засчет использования дополнительных продуктов, либо за счет специфического проектированияприложения.ЗащитаЗащищенность .NET-приложений поддерживается примерно теми же методами, что изащищенность J2EE-приложений.Здесь также имеется несколько техник аутентификации, возможность определения ролей,обеспеченных набором прав доступа к различным элементам системы, а также возможностьиспользования различных протоколов шифрования и защищенной передачи данных, управленияключами и подтверждения целостности данных.
В рамках .NET используются такжемногоуровневые политики защиты, которые определяют набор прав, предоставляемых коду изразных источников.Программные интерфейсы к различным механизмам управления защищенностью приложенийи ресурсов реализуются классами и интерфейсами пространства имен System.Security,находящимися в сборках mscorlib, System и System.Security.Работа с XMLВ целом техника работы с XML-документами в .NET опирается на реализацию объектноймодели документов XML (DOM) и на механизм разбора, аналогичный StAX, реализуемый классомSystem.Xml.XmlReader. Классы, реализующие различные парсеры XML, различные вариантыпредставления XML-документов, а также их трансформацию на основе XSLT-описаний,находятся в пространстве имен System.Xml, разбросанному по сборкам System.Data,System.Data.SqlXml и System.Xml.Одной из особенностей работы с XML в .NET является встроенная возможность работы сXML-данными в рамках механизмов ADO.NET (в основном предназначенных для работы среляционными СУБД) с помощью класса System.Xml.XmlDataDocument.Литература к Лекции 13[1] Web-сайт консорциума World Wide Web http://www.w3.org/.[2] http://www.xml.com/.[3] XML 1.1, 2004.
Доступен через http://www.w3.org/TR/xml11/.[4] Annotated XML 1.0, 1998. Доступен через http://www.xml.com/axml/axml.html.[5] Расширяемый язык разметки (XML) 1.0 (русский перевод первой версии стандарта).Доступен через http://www.rol.ru/news/it/helpdesk/xml01.htm.[6] Материалы по XMLSchema http://www.w3.org/XML/Schema.[7] Namespaces in XML, 1999. Доступен через http://www.w3.org/TR/REC-xml-names/.[8] Java Platform Enterprise Edition Specifications, version 1.4.http://java.sun.com/j2ee/j2ee-1_4-fr-spec.pdf.[9] Э.