объекта. Объект можно создать с помощью класса Activator, как это делалось ранее. Нельзя при этом использовать new, так как невозможно создать экземпляр самого интерфейса.

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

SOAPSuds

Можно также использовать утилиту soapsuds, чтобы получить метаданные из сборки, soapsuds преобразовывает сборки в XML Schemas, XML Schemas для погружения классов и другие директивы.

Следующая команда преобразует тип Hello из сборки RemoteHello.dll в сборку HelloWrapper.dll, где генерируется прозрачный прокси, который вызывает удаленный объект.

soapsuds -types:Wrox.ProfessionalCSharp.Hello, RemoteHello -oa:HelloWrapper.dll

С помощью soapsuds можно также получить информацию о типах непосредственно с выполняющегося сервера:

soapsuds -url:http://localhost:6792/hi -oa:HelloWrapper.dll

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

Параметр Описание
-url Извлекает схему из указанного URL.
-proxyurl Если требуется прокси сервер для доступа к серверу, определите прокси с помощью этого параметра.
-types Определяет тип и сборку для чтения из нее информации о схеме.
-is Файл ввода схемы.
-ia Файл ввода сборки.
-os Файл вывода схемы.
-oa Файл вывода сборки.

Отслеживание служб

Отладку и поиск неисправностей в приложениях, использующих .NET, можно проводить через службы удаленного отслеживания. Класс System.Runtime.Remoting.Services.TrackingService предоставляет службу слежения для получения информации о том, когда происходит маршализация и демаршализация, когда вызываются удаленные объекты и разъединяются и т. д.

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

□ Интерфейс ITrackingHandler вызывается, когда на удаленном объекте или на прокси происходит событие. Можно реализовать три метода в обработчике: MarshaledObject() , UnmarshaledObject() и DisconnectedObject().

Чтобы увидеть службы слежения в действии на клиенте и на сервере, создадим новую библиотеку классов TrackingHandler. Класс TrackingHandler реализует интерфейс ITrackingHandler. В методах задаются два аргумента: сам объект и ObjRef. С помощью ObjRef выдается информация об URI, канале и уполномоченных приемниках. Можно также присоединить новые приемники для добавления спонсоров всех вызываемых методов. В данном примере на консоль записывается URI и информация о канале.

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Services; 

namespace Wrox.ProfessionalCSharp (

 public class TrackingHandler : ITrackingHandler {

  public TrackingHandler() {

  }

  public void MarshaledObject(object obj, ObjRef or) {

   Console.WriteLine('--- Marshaled Object ' + obj.GetType() + ' ---');

   Console.WriteLine('Object URI: ' + or.URI);

   object[] ChannelData = or.ChannelInfo.ChannelData;

   foreach(object data in ChannelData) {

    ChannelDataStore dataStore = data as ChannelDataStore;

    if (dataStore != null) {

     foreach (string uri in dataStore.ChannelUris) {

      Console.WriteLine('Channel URI: ' + uri);

     }

    }

}

   Console.WriteLine('---------');

   Console.WriteLine();

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату