Опубликован: 11.05.2007 | Доступ: свободный | Студентов: 1601 / 158 | Оценка: 4.36 / 4.25 | Длительность: 16:06:00
Лекция 10:

Промежуточная среда .NET Remoting

Аннотация: Рассматривается промежуточная среда .NET Remoting, примеры ее использования и модификации архитектуры данной среды. Даются рекомендации по применению .NET Remoting в распределенных приложениях.

8.1. Введение в среду .NET Remoting

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

Различные сценарии использования среды Remoting

Рис. 8.1. Различные сценарии использования среды Remoting

Кроме использования в качестве самостоятельной промежуточной среды, .NET Remoting также используется для организации взаимодействия .NET Framework и среды COM+ в рассмотренной ранее промежуточной среде .NET Enterprise Services.

С точки зрения среды Remoting, все классы объектов среды CLR делятся на три вида.

  1. Классы, маршализируемые по значению. Объекты этих классов могут копироваться между доменами приложений, если для них определены операции сериализации и десериализации. В результате десериализации создается копия объекта, не связанная с его оригиналом. Следует отметить, что сериализация и десериализация некоторых объектов может быть осуществлена не со всеми классами форматирования, как указано в теме о сериализации.
  2. Классы, маршализируемые по ссылке. Такие классы наследуются от класса System.MarshalByRefObject. Объекты этих классов не покидают свой домен приложения, но на стороне клиента создается посредник, позволяющий осуществлять удаленный доступ к объекту. Именно экземпляры таких классов могут использоваться как удаленные объекты при помощи среды Remoting. Remoting поддерживает все три вида удаленных объектов: объекты единственного вызова, единственного экземпляра и объекты, активируемые по запросу клиента.
  3. Немаршализируемые классы, а так же классы без определенной процедуры сериализации или отмеченные, как несериализуемые. Объекты этих классов недоступны вне своего домена приложения. Это, в частности, касается и классов исключений – выбрасываемые на сервере Remoting исключения должны маршализироваться по значению для передачи клиенту.

Таким образом, среда Remoting является средством поддержки удаленных вызовов между доменами приложений CLR. В отличие от технологий MSMQ и COM+, среда Remoting не привязана жестко к каким либо службам операционной системы Microsoft Windows. Благодаря этому ответственные за реализацию среды Remoting пространства имен являются стандартизированной частью CLI, в отличие от пространств System.EnterpriseServices и System.Messaging. Таким образом, одним из достоинств Remoting является переносимость как между различными реализациями CLI фирмы Microsoft (.NET Framework, .NET Compact Framework), а также независимыми реализациями CLI (в настоящий момент к ним относятся Mono Project и DotGNU Portable.NET).

Реализация промежуточной среды Remoting только силами исполняемой среды CLI привела и к определенным недостаткам. Возможности Remoting как промежуточной среды достаточно скромны по сравнению со средой Enterprise Services. Remoting не имеет аналогов большинства сервисов среды COM+, в первую очередь это касается распределенных транзакций. В самой среде Remoting отсутствуют так же какие либо средства обеспечения безопасности, однако эта проблема может быть решена сервером носителем среды Remoting, в роли которого может выступать служба Internet Information Services (IIS).

8.2. Архитектура среды .NET Remoting

Среда Remoting имеет достаточно сложную организацию удаленного вызова, которая позволяет разработчику при необходимости полностью контролировать и модифицировать процесс вызова клиентом Remoting метода объекта сервера. Это, с одной стороны, дает возможность после доработок применять среду Remoting практически с любыми каналами передачи информации (например, поверх MSMQ) или для некоторых специальных целей (например, для взаимодействия CLR и COM+). Открытая и изменяемая архитектура среды также делает ее достаточно привлекательной с педагогической точки зрения при изучении механизмов удаленного вызова. С другой стороны, модификация архитектуры Remoting является достаточно нетривиальной задачей, в результате решения которой могут быть получены сложные, нестандартные и недостаточно проверенные, в том числе с точки зрения безопасности, расширения промежуточной среды. Поэтому вопрос о полезности больших возможностей по расширению промежуточной среды конечным разработчиком остается, видимо, открытым.

Выполнение удаленного вызова в .NET Remoting

Рис. 8.2. Выполнение удаленного вызова в .NET Remoting