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

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

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

Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ являСтся Ρ‡Π»Π΅Π½ пСрСчня WellKnownObjectMode, ΠΈ для Π½Π΅Π³ΠΎ здСсь ΡƒΠΊΠ°Π·Π°Π½ΠΎ WellKnownObjectMode.Singleton. Напомним, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании WKO-синглСта всС ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ запросы ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈΠΌ экзСмпляром RemoteMessageObject. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ сСрвСра ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ созданию ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΠ΄Π°-Π»Π΅Π½Π½ΠΎΠ³ΠΎ доступа, остаСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запросит доступ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ возмоТностям. Π—Π΄Π΅ΡΡŒ снова создайтС простоС консольноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. УстановитС ссылку Π½Π° System.Runtime.Remoting.dll ΠΈ SimpleRemotingAsm.dll. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Main() Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

using SimpleRemotingAsm;

namespace SimpleRemoteObjectClient {

 class SimpleObjClient {

  static void Main(string[] args) {

   Console.WriteLine("*** Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ SimpleRemoteObjectClient! ***");

   Console.WriteLine("Для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ β€ΉEnterβ€Ί");

   // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ HttpChannel.

   HttpChannel с = new HttpChannel();

   ChannelServices.RegisterChannel(c);

   // ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π°Π³Π΅Π½Ρ‚Π° для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ доступа ΠΊ WKO-Ρ‚ΠΈΠΏΡƒ.

   object remoteObj = Activator.GetObject(typeof(SimpleRemotingAsm.RemoteMessageObject), "http://localhost:32469/RemoteMsgObj.soap");

   // ИспользованиС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

   RemoteMessageObject simple = (RemoteMessageObject)remoteObj;

   simple.DisplayMessage("ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°!");

   Console.WriteLine("Π‘Π΅Ρ€Π²Π΅Ρ€ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: {0}", simple.ReturnMessage());

   Console.ReadLine();

  }

 }

}

Π’ этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ HTTP-ΠΊΠ°Π½Π°Π», Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΡ€Ρ‚Π° ΠΏΡ€ΠΈ этом Π½Π΅ указываСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ конСчная Ρ‚ΠΎΡ‡ΠΊΠ° ΠΊΠ°Π½Π°Π»Π° задаСтся адрСсом URL Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ, поставляСмым ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ взаимодСйствуСт с WKO-Ρ‚ΠΈΠΏΠΎΠΌ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ конструктор Ρ‚ΠΈΠΏΠ°, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π‘ этой Ρ†Π΅Π»ΡŒΡŽ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Activator.GetObject() с двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ являСтся информация Ρ‚ΠΈΠΏΠ° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ послСднСС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅Ρ‰Π΅ Ρ€Π°Π·. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ здСсь ΠΌΠ΅Ρ‚ΠΎΠ΄ Activator.GetObject() Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ описания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, становится ясно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ трСбуСтся ссылка Π½Π° ΠΎΠ±Ρ‰ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ! Π’ ΠΊΠΎΠ½Ρ†Π΅ Π³Π»Π°Π²Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ возмоТности ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ повСдСния ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Activator.GetObject() прСдставляСт собой URL Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ URL Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π΅ WKO-Ρ‚ΠΈΠΏ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.

Π‘Ρ…Π΅ΠΌΠ°ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°://Π˜ΠΌΡΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°:ΠŸΠΎΡ€Ρ‚/UriΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°

НаконСц, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Activator.GetObject() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚ΠΈΠΏ System.Object, поэтому для получСния доступа ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ RemoteMessageObject Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ явноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°.

ВСстированиС прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ взаимодСйствиС

ΠŸΡ€ΠΈ тСстировании прилоТСния Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ с запуска сСрвСрного прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ HTTP-ΠΊΠ°Π½Π°Π» ΠΈ зарСгистрируСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ RemoteMessageObject для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ доступа. Π—Π°Ρ‚Π΅ΠΌ запуститС экзСмпляр прилоТСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Если всС ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΎΠΊΠ½ΠΎ вашСго сСрвСра Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π½Π° рис. 18.2, Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° рис. 18.3.

Рис. 18.2. Π’Ρ‹Π²ΠΎΠ΄ сСрвСра

Рис. 18.3. Π’Ρ‹Π²ΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Π’ΠΈΠΏ ChannelServices

Π˜Ρ‚Π°ΠΊ, объявляя сущСствованиС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, сСрвСр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏ System. Runtime.Remoting.Channels.ChannelServices. Π’ΠΈΠΏ ChannelServices ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ нСбольшой Π½Π°Π±ΠΎΡ€ статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΡ€ΠΈΠ·Π²Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ содСйствиС Π² процСссС рСгистрации ΠΊΠ°Π½Π°Π»Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия ΠΈ обнаруТСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ URL. Π“Π»Π°Π²Π½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° описаны Π² Ρ‚Π°Π±Π». 18.4.

Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ RegisterChannel() ΠΈ UnregisterChannel() с ΠΈΡ… ясными названиями, Ρ‚ΠΈΠΏ ChannelServices опрСдСляСт свойство RegisteredChannels. Π­Ρ‚ΠΎΡ‚ Ρ‡Π»Π΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив интСрфСйсов IChannel, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставляСт дСскриптор ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈΠ· Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зарСгистрированы Π² Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΎΠΌΠ΅Π½Π΅ прилоТСния.

Π’Π°Π±Π»ΠΈΡ†Π° 18.4. ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° Ρ‡Π»Π΅Π½ΠΎΠ² Ρ‚ΠΈΠΏΠ° ChannelServices

Π§Π»Π΅Π½ ОписаниС RegisteredChannels Бвойство, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π΅Π΅ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ список зарСгистрированных Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставляСтся интСрфСйсом IChannel DispatchMessage() ΠœΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² GetChannel() ΠœΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ зарСгистрированный ΠΊΠ°Π½Π°Π» с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ GetUrlsForObject() ΠœΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ массив адрСсов URL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для доступа ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ RegisterChannel() ΠœΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ°Π½Π°Π» ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠ°Π½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ сСрвисами UnregisterChannel() ΠœΠ΅Ρ‚ΠΎΠ΄, ΠΎΡ‚ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‰ΠΈΠΉ этот ΠΊΠ°Π½Π°Π» ΠΈΠ· списка зарСгистрированных

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ интСрфСйса IChannel оказываСтся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простым.

publiс interface IChannel {

 string ChannelName { get; }

 int ChannelPriority { get; }

 string Parse(string url, ref String objectURI);

}

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ понятноС строковоС имя, Π° Ρ‚Π°ΠΊΠΆΠ΅ свой ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°. НапримСр, Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ Main() прилоТСния SimpleRemoteObjectClient ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ

// Бписок всСх зарСгистрированных ΠΊΠ°Π½Π°Π»ΠΎΠ².

IChannel[] сhannelObjs = ChannelServices.RegisteredChannels;

foreach (IChannel i in channelObjs) {

 Console.WriteLine("Имя ΠΊΠ°Π½Π°Π»Π°: {0}", i.ChannelName);

 Console.WriteLine("ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: {0}", i.ChannelPriority);

}

Ρ‚ΠΎ Π² ΠΎΠΊΠ½Π΅ консоли ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π½Π° рис. 18.4.

Рис. 18.4. Бписок ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² ΠΎΠΊΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Π’ΠΈΠΏ RemotingConfiguration

Π”Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия являСтся Ρ‚ΠΈΠΏ RemotingConfiguration, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² соотвСтствии со своим Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для настройки Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² прилоТСния ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия. Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ этот Ρ‚ΠΈΠΏ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π° сторонС сСрвСра (ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° RegisterWellKnownServiceType()). Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ внимания статичСскиС Ρ‡Π»Π΅Π½Ρ‹ этого Ρ‚ΠΈΠΏΠ° ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ‚Π°Π±Π». 18.5, Π° возмоТности примСнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· этих Ρ‡Π»Π΅Π½ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ продСмонстрированы Π² ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части этой Π³Π»Π°Π²Ρ‹.

Π’Π°Π±Π»ΠΈΡ†Π° 18.5. Π§Π»Π΅Π½Ρ‹ Ρ‚ΠΈΠΏΠ° RemotingConfiguration 

Π§Π»Π΅Π½ ОписаниС ApplicationId Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ прилоТСния, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ ApplicationName Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ»ΠΈ устанавливаСт имя прилоТСния ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия ProcessId Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ Configure() Π§ΠΈΡ‚Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ устанавливаСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ инфраструктуры ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия GetRegisteredActivatedClientTypes() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², зарСгистрированных Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ GetRegisteredActivatedServiceTypes() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², зарСгистрированных Π½Π° сторонС сСрвиса для Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ запросу ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° GetRegisteredWellKnownClientTypes() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², зарСгистрированных Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² качСствС WKO-Ρ‚ΠΈΠΏΠΎΠ² GetRegisteredWellKnownServiceTypes() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², зарСгистрированных Π½Π° сторонС сСрвиса Π² качСствС WKO-Ρ‚ΠΈΠΏΠΎΠ² IsWellKnownClientType() ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, являСтся Π»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ зарСгистрированным WKO-Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° RegisterActivatedClientType() РСгистрируСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° сСрвСрС RegisterWellKnownClientType() РСгистрируСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊΠ°ΠΊ WKO-Ρ‚ΠΈΠΏ (синглСт ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°) RegisterWellKnownServiceType() РСгистрируСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° сторонС сСрвиса ΠΊΠ°ΠΊ WKO-Ρ‚ΠΈΠΏ (синглСт ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°)

Напомним, Ρ‡Ρ‚ΠΎ слой ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия .NET Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ Π΄Π²Π° Π²ΠΈΠ΄Π° MBR-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: WKO (Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ сСрвСром) ΠΈ БАО (Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ). К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, WKO-Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ синглСт, Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности Ρ‚ΠΈΠΏΠ° RemotingConfiguration, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ динамичСски ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² срСдС выполнСния. НапримСр, Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ Main() прилоТСния SimpleRemoteObjectServer ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°: