Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Создание компоновочного блока клиента

Создание компоновочного блока клиента

Наконец, рассмотрим приложение клиента, которое будет использовать MBR-тип CarProvider для получения отдельных типов JamesBondCars и типа List‹›. После получения типа от CarProvider вы посылаете его вспомогательной функции UseCar() для обработки.

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using CarGeneralAsm;
using System.Collections.Generic;
namespace CarProviderClient {
 class CarClient {
  private static void UseCar(JamesBondCar c) {
   Console.WriteLine("-› Имя: {0}", с.PetName);
   Console.WriteLine("-› Макc. скорость: {0} ", с.MaxSpeed);
   Console.WriteLine("-› Способность плавать: {0}", с.isSeaWorthy);
   Console.WriteLine("-› Способность летать: {0}, c.isFlightWorthy);
   Console.WriteLine();
  }
  static void Main(string[] args) {
   RemotingConfiguration.Configure("CarProviderClient.exe.config");
   // Создание поставщика машин.
   CarProvider cр = new CarProvider();
   // Получение первого объекта JBC.
   JamesBondCar qCar = cp.GetJBCByIndex(0);
   // Получение всех объектов JBC.
   List‹JamesBondCar› allJBCs = cp.GetAllAutos();
   // Использование первой машины.
   UseCar(gCar);
   // Использование всех машин в List‹›.
   foreach(JamesBondCar j in allJBCs) UseCar(j);
   Console.WriteLine(''Старт клиента! Для остановки нажмите ‹Enter›");
   Console.ReadLine();
  }
 }
}

Содержимое файла *.config на стороне клиента также соответствует ожиданиям. Здесь нужно просто изменить URL активизации.

‹configuration›
 ‹system.runtime.remoting›
  ‹application›
   ‹client displayName = "CarClient"›
    ‹wellknown type= "CarGeneralAsm.CarProvider, CarGeneralAsm" url="tcp://localhost:32469/carpovider.rem"/›
   ‹/client›
   channels
    ‹channel ref="http" /›
   ‹/channels›
  ‹/application›
 ‹/system.runtime.remoting›
/configuration

Теперь запустите свои приложения сервера и клиента (конечно же, в указанном порядке) и рассмотрите соответствующий вывод. В окне консоли клиента будут представлены объекты JamesBondCar и соответствующая информация для каждого типа. Напомним, что вы взаимодействуете с List‹› и типами JamesBondCar, поэтому вы работаете с их членами в рамках домена приложения клиента, так как оба указанных типа обозначены атрибутом [Serializable].

Чтобы доказать это, измените вспомогательную функцию UseCar() так, чтобы она вызывала метод TurnOnRadio() для входного объекта JamesBondCar. Теперь запустите приложения сервера и клиента еще раз. Обратите внимание на то, что на машине клиента теперь появляются соответствующие сообщения. Если бы типы Car, Radio и JamesBondCar были сконфигурированы, как MBR-типы, сообщения бы появлялись на сервере. Для проверки получите каждый из указанных типов из MarshalByRefObject и перекомпилируйте все три компоновочных блока (для гарантии того, что Visual Studio 2005 скопирует самый последний CarGeneralAsm.dll в каталоги приложений клиента и сервера). Теперь при выполнении приложения окно с сообщением появится на удаленной машине.

Исходный код. Проекты CarGeneralAsm, CarProviderServer и CarProviderClient размещены в подкаталоге, соответствующем главе 18.

Оглавление книги


Генерация: 0.976. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз