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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 92

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

β–‘ ΠΠ° сСрвСрС элСмСнт <service> ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния совокупности ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ подэлСмСнты <wellknown> ΠΈ <activated> вмСстС с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” well known ΠΈΠ»ΠΈ client-activated.

β–‘ ΠšΠ»ΠΈΠ΅Π½Ρ‚ской Ρ‡Π°ΡΡ‚ΡŒΡŽ элСмСнта <service> являСтся <client>. Подобно элСмСнту <service> ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ подэлСмСнты <wellknown> ΠΈ <activated> для опрСдСлСния Ρ‚ΠΈΠΏΠ° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ <service> элСмСнт <client> ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ url для опрСдСлСния URL ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

β–‘ <wellknown> являСтся элСмСнтом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° сСрвСрС ΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ для опрСдСлСния Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². БСрвСрная Ρ‡Π°ΡΡ‚ΡŒ выглядит Ρ‚Π°ΠΊ:

<wellknown mode="SingleCall" type="Wrox.ProfessionalCSharp.Hello, RemoteHello" objectURI="Hi" />

β–‘ Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ mode ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния SingleCall ΠΈΠ»ΠΈ Singleton, type являСтся Ρ‚ΠΈΠΏΠΎΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ пространство ΠΈΠΌΠ΅Π½ Wrox.ProfessionalCSharp.Hello, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт имя сборки RemoteHello. ИмСнСм ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° являСтся objectURI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ зарСгистрирован Π² ΠΊΠ°Π½Π°Π»Π΅. На ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ type являСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ для сСрвСрной вСрсии. mode ΠΈ objectURI Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, вмСсто Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ url для опрСдСлСния ΠΏΡƒΡ‚ΠΈ доступа ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ: ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», имя хоста, Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, имя прилоТСния ΠΈ URI ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

<wellknown type="Wrox.ProfessionalCSharp.Hello, RemoteHello" url="tcp://localhost:6791/Hello/Hi" />

β–‘ Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ <activated> ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° type Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ сборка ΠΊΠ°ΠΊ для клиСнтского, Ρ‚Π°ΠΊ ΠΈ для сСрвСрного ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ:

<activated type="Wrox.ProfessionalCSharp.Hello, RemoteHello" />

β–‘ Для опрСдСлСния ΠΊΠ°Π½Π°Π»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ элСмСнт <channel>. Π­Ρ‚ΠΎ подэлСмСнт <channels>, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния. Π•Π³ΠΎ использованиС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ сСрвСров. Атрибут type ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния Ρ‚ΠΈΠΏΠ° ΠΊΠ°Π½Π°Π»Π° ΠΈ сборки. Атрибут port являСтся Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎΡ€Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для сСрвСрной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:

<channels>

 <channel type = "System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting" port="6791" />

 <channel type = "System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting" port="6792" />

</channels>

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ сСрвСра для Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° wellknown.config ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Hello для свойства Name. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ°Π½Π°Π» TCP для ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎΡ€Ρ‚Π° 6791, Π° ΠΊΠ°Π½Π°Π» HTTP для ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎΡ€Ρ‚Π° 6792. Класс ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€”Wrox.ProfessionalCSharp.Hello Π² сборкС RemoteHello.dll, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΊΠ°Π½Π°Π»Π΅ называСтся Hi, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π΅ΠΆΠΈΠΌ SingleCall:

<configuration>

 <system.runtime.remoting>

  <application name="Hello">

   <service>

    <wellknown mode="SingleCall" type="Wrox.ProfessionalCSharp.Hello, RemoteHello" objectUri ="Hi" />

   </service>

   <channels>

    <channel type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting" port="6791" />

    <channel type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting" port="6792" />

   </channels>

  </application>

 </system.runtime.remoting>

</configuration>

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Для Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² клиСнтском ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ wellknown.config Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ сборку ΠΈ ΠΊΠ°Π½Π°Π». Π’ΠΈΠΏΡ‹ для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² сборкС RemoteHello.dll, Hi являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΊΠ°Π½Π°Π»Π΅, a URI для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Wrox.ProfessionalCSharp.Hello β€” это tcp://localhost:6791/Hi. На ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π» TCP, Π½ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ Π½Π΅ опрСдСляСтся ΠΏΠΎΡ€Ρ‚, поэтому выбираСтся свободный ΠΏΠΎΡ€Ρ‚.

<configuration>

 <system.runtime.remoting>

  <application name="Client">

   <client url="tcp:/localhost:6791/Hello">

    <wellknown type = "Wrox.ProfessionalCSharp.Hello, RemoteHello" url="tcp://localhost:6791/Hello/Hi" />

   </client>

   <channels>

    <channel type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting" />

   </channels>

  </application>

 </system.runtime.remoting>

</configuration>

ВнСсСм нСбольшоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» HTTP (ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ Π² wellknownhttp.config):

<client url="http://localhost:6792/Hello">

 <wellknown type="Wrox.ProfessionalCSharp.Hello, RemoteHello" url="http://localhost:6792/Hello/Hi" />

</client>

<channels>

 <channel type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting" />

</channels>

БСрвСрная конфигурация для Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π² clientactivated.config), ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сСрвСр с Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… сСрвСром ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π—Π΄Π΅ΡΡŒ опрСдСляСтся подэлСмСнт <activated> элСмСнта <service>. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ для сСрвСрной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ type. Атрибут name элСмСнта application опрСдСляСт URI:

<configuration>

 <system.runtime.remoting>

  <application name="HelloServer">

   <service>

    <activated type="Wrox.ProfessionalCSharp.Hello, RemoteHello" />

   </service>

   <channels>

    <channel type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting" ports="6788" />

    <channel type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting" ports="6789" /Β»

   </channels>

  </application>

 </system.runtime.remoting>

</configuration>

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ конфигурация для Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π€Π°ΠΉΠ» clientactivated.config опрСдСляСт Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° url элСмСнта <client> ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° type элСмСнта <activated>:

<configuration>

 <system.runtime.remoting>

  <application>

   <client url="http://localhost:6788/HelloServer" >

    <activated type="Wrox.ProfessionalCSharp.Hello, RemoteHello" />

   </client>

   <channels>

    <channel type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting" />

    <channel type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting" />

   </channels>

  </application>

 </system.runtime.remoting>

</configuration>

Π‘Π΅Ρ€Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

Π’ сСрвСрном ΠΊΠΎΠ΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ использованиС статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Configure() ΠΈΠ· класса RemotingConfiguration. Π—Π΄Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ экзСмпляры всСх опрСдСляСмых ΠΊΠ°Π½Π°Π»ΠΎΠ². ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ конфигурациях ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈΠ· сСрвСрного прилоТСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ созданы статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ShowActivatedServiceTypes() ΠΈ ShowWellKnovmServiceTypes(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ запуска ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:

public static void Main(string[] args) {

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

 Console.WriteLine(

  "Application: " + RemotingConfiguration.ApplicationName);

 ShowActivatedServiceTypes();

 ShowWellKnownServiceTypes();

 System.Console.WriteLine("hit to exit");

 System.Console.ReadLine();

 return;

}

Π­Ρ‚ΠΈ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠΎΠ²:

public static void ShowWellKnownServiceTypes() {

 WellKnownServiceTypeEntry[] entries =

  RemotingConfiguration.GetRegisteredWellKnownServiceTypes();

 foreach (WellKnownServiceTypeEntry entry in entries) {

  Console.WriteLine("Assembly: " + entry.AssemblyName);

  Console.WriteLine("Mode: " + entry.Mode);

  Console.WriteLine("URI " + entry.ObjectUri);

  Console.WriteLine("Type: " + entry.TypeName);

 }

}


public static void ShowActivatedServiceTypes() {

 ActivatedServiceTypeEntry[] entries =

  RemotingConfiguration.GetRegisteredActivatedServiceTypes();

 foreach(ActivatedServiceTypeEntry entry in entries) {

  Console.WriteLine("Assembly: " + entry.AssemblyName);

  Console.WriteLine("Type: " + entry.TypeName);

 }

}

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

Π’ клиСнтском ΠΊΠΎΠ΄Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° client.exe.config Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ слуТбы. ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new для создания Π½ΠΎΠ²Ρ‹Ρ… экзСмпляров класса Remote нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, происходит Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ сСрвСром ΠΈΠ»ΠΈ с Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Но ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ сущСствуСт нСбольшая Ρ€Π°Π·Π½ΠΈΡ†Π°. Для Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ конструкторы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new. Π­Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ для Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… сСрвСром ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла Π² этом случаС: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ SingleCall Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ состояния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π·Ρ€ΡƒΡˆΠ°ΡŽΡ‚ΡΡ вмСстС с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Singleton ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹. Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… конструкторов ΠΏΠΎΠ»Π΅Π·Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для этого Π²ΠΈΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ конструктор ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: