ΠΠ°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅Π½ ΠΏΠ΅ΡΠ΅ΡΠ½Ρ 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 ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°: