β‘ ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ <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 ΡΠ΅Π°Π»ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°: