Поделиться через


Передача объектов в качестве параметров

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

  • Они должны содержать только входные параметры.
  • Они не должны возвращать конкретный результат приложения.

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

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

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

Сохраняемые объекты Visual Basic

Microsoft Visual Basic 6 позволяет создавать сохраняемые объекты. Эти объекты поддерживают IPersistStream и могут передаваться в качестве параметров в вызовы метода компонента в очереди. Перед передачей объекта Visual Basic в очередь необходимо инициализировать сохраняемый объект. Это можно сделать одним из следующих двух способов:

  • Если приложение, создающее сохраняемый объект, записывается в Visual Basic, среда выполнения Visual Basic автоматически обрабатывает инициализацию объекта.
  • Если приложение, создающее сохраняемый объект Visual Basic, записывается на языке, отличном от Visual Basic, например Microsoft Visual C++, приложение должно явно инициализировать компонент, запрашивая интерфейс IPersistStream объекта или вызывая метод IPersistStreamInit::InitNew или IPersistStream::Load.

Наборы записей ADO и наборы строк OLE DB

Передача объектов набора строк ADO или НАБОРА строк OLE DB между компонентами позволяет одному компоненту обрабатывать результаты запросов, выполняемых другим компонентом. Это полезно при развертывании приложения на нескольких компьютерах. Объекты наборов записей и наборов строк можно передавать в качестве параметров метода в очереди компонентов с следующими ограничениями:

  • Объекты набора записей на стороне сервера нельзя маршалировать с помощью IPersistStream. В вызов метода компонента очереди можно передавать только объекты набора записей на стороне клиента.
  • Если вы работаете непосредственно с OLE DB, набор строк OLE DB должен быть определен как клиентский набор строк.