Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π—Π«Πš ΠŸΠ ΠžΠ“Π ΠΠœΠœΠ˜Π ΠžΠ’ΠΠΠ˜Π― Π‘# 2005 И ΠŸΠ›ΠΠ’Π€ΠžΠ ΠœΠ .NET 2.0. 3-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 161

Автор Π­Π½Π΄Ρ€ΡŽ ВроСлсСн

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ MBR-Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчит доступ ΠΊ Ρ‚ΠΈΠΏΡƒ JamesBondCar. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ интСрСсной, ваш MBR-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (CarProvider) Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ список Listβ€Ήβ€Ί Ρ‚ΠΈΠΏΠΎΠ² JamesBondCar. Π’ΠΈΠΏ CarProvider ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ Π΄Π²Π° Ρ‡Π»Π΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ сторонС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ JamesBondCar, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Listβ€Ήβ€Ί ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². Π’ΠΎΡ‚ вСсь ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ для Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° класса.

namespace CarGeneralAsm {

 // Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ являСтся MBR-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ доступ

 // ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ MBV-Ρ‚ΠΈΠΏΠ°ΠΌ.

 public class CarProvider: MarshalByRefObject {

  private Listβ€ΉJamesBondCarβ€Ί theJBCars = new Listβ€ΉJamesBondCarβ€Ί();

  // Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² список Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… машин.

  public CarProvider() {

   Console.WriteLine("Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ поставщика машин");

   theJBCars.Add(new JamesBondCar("QMobile", 140, true, true"));

   theJBCars.Add(new JamesBondCar("Flyer", 140, true, false));

   theJBCars.Add(new JamesBondCar("Swimmer", 140, false, true));

   theJBCars.Add(new JamesBondCar("BasicJBC", 140, false, false));

  }

  // ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ всСх JamesBondCar.

  public Listβ€ΉJamesBondCarβ€Ί GetAllAutos() { return theJBCars; }

  // ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ JamesBondCar,

  public JamesBondCar GetJBCByIndex(int i) { return (JamesBondCar)theJBCars[i]; }

 }

}

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetAllAutos() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ‚ΠΈΠΏ Listβ€Ήβ€Ί. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ вопрос: ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½ пространства ΠΈΠΌΠ΅Π½ System. Collections.Generic прСдставляСтся Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ сторонС? Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ описаниС этого Ρ‚ΠΈΠΏΠ° Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ .NET Framework 2.0 SDK, Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ listβ€Ήβ€Ί сопровоТдаСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ [Serializable].

[SerializableAttribute()]

public class Listβ€ΉTβ€Ί: IList, ICollection, IEnumerable

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для всСго содСрТимого Ρ‚ΠΈΠΏΠ° Listβ€Ήβ€Ί Π±ΡƒΠ΄Π΅Ρ‚ использован ΠΌΠ°Ρ€ΡˆΠ°Π»ΠΈΠ½Π³ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (Ссли содСрТащиСся Π² Π½Π΅ΠΌ Ρ‚ΠΈΠΏΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ). Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ удобная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия .NET ΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов. Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ MBV- ΠΈ MBR-Ρ‚ΠΈΠΏΠ°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сами, любой Ρ‚ΠΈΠΏ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов, ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ [Serializable], Ρ‚Π°ΠΊΠΆΠ΅ способСн Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² качСствС MBV-Ρ‚ΠΈΠΏΠ° Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия .NET. Аналогично, любой Ρ‚ΠΈΠΏ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ (нСпосрСдствСнно ΠΈΠ»ΠΈ косвСнно) ΠΈΠ· MarshalByRefObject, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ MBR-Ρ‚ΠΈΠΏ.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ SoapFormatter Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€ΠΈ создании ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (Π½Π°ΠΏΡ€ΠΈ-ΠΌΠ΅Ρ€, Listβ€Ήβ€Ί), Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ BinaryFormatter ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ TcpChannel.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° сСрвСра

ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ сСрвСра (CarProviderServer.exe) Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Main() содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ.

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

using CarGeneralAsm;

namespace CarProviderServer {

 class CarServer {

  static void Main(string[] args) {

   RemotingConfiguration.Configure("CarProviderServer.exe.config");

   Console.WriteLine("Π‘Ρ‚Π°Ρ€Ρ‚ сСрвСра! Для остановки Π½Π°ΠΆΠΌΠΈΡ‚Π΅ β€ΉEnterβ€Ί");

   Console.ReadLine();

  }

 }

}

Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» *.config ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ»Ρƒ *.config сСрвСра, созданному Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ЕдинствСнным Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ внимания ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ здСсь являСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ значСния URI ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для Ρ‚ΠΈΠΏΠ° CarProvider.

β€Ήconfigurationβ€Ί

 β€Ήsystem.runtime.remotingβ€Ί

  β€Ήapplicationβ€Ί

   β€Ήserviceβ€Ί

    β€Ήwellknown mode="Singleton" type="CarGeneralAsm.CarProvider, CarGeneralAsm" objectUri="carprovider.rem" /β€Ί

   β€Ή/serviceβ€Ί

   β€Ήchannelsβ€Ί

    β€Ήchannel ref="tcp" port="32469" /β€Ί

   β€Ή/channelsβ€Ί

  β€Ή/applicationβ€Ί

 β€Ή/system.runtime.remotingβ€Ί

β€Ή/configurationβ€Ί

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

НаконСц, рассмотрим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 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.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ

ВсС созданныС Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия использовали WKO-Ρ‚ΠΈΠΏΡ‹. Напомним, Ρ‡Ρ‚ΠΎ WKO-Ρ‚ΠΈΠΏΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ особСнности.

β€’ WKO-Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ синглСт ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

β€’ WKO-Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ½ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструктора Ρ‚ΠΈΠΏΠ°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

β€’ ЭкзСмпляр WKO-Ρ‚ΠΈΠΏΠ° создаСтся Π½Π° сСрвСрС ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запросС Ρ‡Π»Π΅Π½Π° этого Ρ‚ΠΈΠΏΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ,

ЭкзСмпляры БАО-Ρ‚ΠΈΠΏΠΎΠ², с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ любого конструктора Ρ‚ΠΈΠΏΠ°, ΠΈ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово C# new ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ Activator. Π¦ΠΈΠΊΠ» сущСствования БАО-Ρ‚ΠΈΠΏΠΎΠ² контролируСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π»ΠΈΠ·ΠΈΠ½Π³ΠΎΠ²ΠΎΠ³ΠΎ управлСния .NET. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ БАО-Ρ‚ΠΈΠΏΠ° слой ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия .NET Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ БАО-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия для обслуТивания ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’Π°ΠΆΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ БАО-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, кумулятивно ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ своСго состояния Π² процСссС выполнСния Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²).

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈ использованиС БАО-Ρ‚ΠΈΠΏΠΎΠ², ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ наш ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ "Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ" ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ. Π’ нашСм MBR-классС CarProvider ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ конструктор, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ массив Ρ‚ΠΈΠΏΠΎΠ² JamesBondCar, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для размСщСния Π² ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΌ спискС Listβ€Ήβ€Ί.

public class CarProvider: MarshalByRefObject {

 private Listβ€ΉJamesBondCarβ€Ί theJBCars = new Listβ€ΉJamesBondCarβ€Ί();