Π€Π°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ
ΠΡΠ°ΠΊ, Π²Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΠ»ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ»ΠΎΠΉ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ .NET. Π ΡΠ²ΡΠ·ΠΈ c Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΌ "ΠΆΠ΅ΡΡΠΊΠΎ" ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ²Π΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΡΡΠ°, ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΈΠΏ ΠΊΠ°Π½Π°Π»Π°. ΠΠ»ΠΈΠ΅Π½Ρ, Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, "ΠΆΠ΅ΡΡΠΊΠΎ" ΠΊΠΎΠ΄ΠΈΡΡΠ΅Ρ ΠΈΠΌΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΡΠ°Π΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ.
Π‘ΠΎΠ³Π»Π°ΡΠΈΡΠ΅ΡΡ, ΡΠ»ΠΈΡΠΊΠΎΠΌ Π½Π°ΠΈΠ²Π½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠΌΠΎΠ³ΡΡ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΉ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π ΠΈΠ΄Π΅Π°Π»Π΅ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠ°ΠΊ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ°, ΡΠ΅ΠΆΠΈΠΌ Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°. Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ ΡΠΎ ΡΡ Π΅ΠΌΠΎΠΉ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ .NET Π²ΡΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ;.
ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΠΈΠ· Π³Π»Π°Π²Ρ 11 ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΠΉΠ» *.config ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ "ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ" ΡΡΠ΅Π΄Π΅ CLR Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΡΡΠ° Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΎΠ², Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΈ ΠΆΠ΅ ΡΠ°ΠΉΠ»Ρ *.config ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈ Π΄Π»Ρ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ CLR ΠΎ ΡΠ΅Π»ΠΎΠΌ ΡΡΠ΄Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠ°ΠΊ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΡΠ°ΠΊ ΠΈ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ°ΠΉΠ»Π° *.config Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ βΉsystem.runtime.remotingβΊ. ΠΡΠ»ΠΈ Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΠ°ΠΉΠ» *.config, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΊΠ°Π·Π°Π½Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² ΡΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΉΠ». ΠΠ΄ΠΈΠ½ΡΠΉ ΡΠ°ΠΉΠ» *.config, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ.
βΉconfigurationβΊ
βΉsΡstem.runtime.remotingβΊ
βΉ!-- ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° --βΊ
βΉ/system.runtime.remotingβΊ
βΉruntimeβΊ
βΉ!-- ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° --βΊ
βΉ/runtimeβΊ
βΉ/configurationβΊ
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ΡΠ΅Π³ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΡΡΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ βΉruntimeβΊ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΉΠ»Π΅ *.config ΡΠ°Π±Π»ΠΎΠ½ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²ΠΈΠ΄Π°.
βΉconfigurationβΊ
βΉsystem.runtime.remotingβΊ
βΉ!-- ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° --βΊ
βΉ/system.runtime.remotingβΊ
βΉ/configurationβΊ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² *.config ΡΠ΅ΡΠ²Π΅ΡΠ°
Π€Π°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π°Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΏΠΎΡΡΠ°. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°.
// "ΠΠ΅ΡΡΠΊΠΎ" Π·Π°Π΄Π°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° HTTP.
HttpChannel Ρ = new HttpChannel(32469);
ChannelServices.RegisterChannel(Ρ);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(SimpleRemotingAsm.RemoteMessageObject), "RemoteMsgObj.soap", WellKnownObjectMode.Singleton);
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ βΉserviceβΊ, βΉwellknownβΊ ΠΈ βΉchannelsβΊ, ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ *.config.
βΉconfigurationβΊ
βΉsystem.runtime.remotingβΊ
βΉapplicationβΊ
βΉserviceβΊ
βΉwellknown mode="Singleton" type="SimpleRemotingAsm.RemoteMessageObject, SimpleRemotingAsm" objectUri="RemoteMsgObj.soap"/βΊ
βΉ/serviceβΊ
βΉchannelsβΊ
βΉchannelref="http"/βΊ
βΉ/channelsβΊ
βΉ/applicationβΊ
βΉ/system.runtime.remotingβΊ
βΉ/configurationβΊ
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° βΉserviceβΊ (Π½Π΅ ΡΠ΅ΡΠ²Π΅Ρ!). ΠΠ³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ βΉwellknownβΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΈ Π°ΡΡΠΈΠ±ΡΡΠ° (mode, type ΠΈ objectUri) Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ WKO-ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΡΠ»ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ .NET. ΠΠ»Π΅ΠΌΠ΅Π½Ρ βΉchannelsβΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π»ΡΠ±ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² βΉchannelβΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²ΠΈΠ΄ ΠΊΠ°Π½Π°Π»Π° (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ HTTP), ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅. ΠΠ»Ρ Π’Π‘Π -ΠΊΠ°Π½Π°Π»ΠΎΠ² Π²ΠΌΠ΅ΡΡΠΎ http Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»Π΅ΠΊΡΠ΅ΠΌΡ tcp.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ SimpleRemoteObjectServer.exe.config, ΠΌΠ΅ΡΠΎΠ΄ Main() ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅ΡΡΡ. Π Π½Π΅ΠΌ ΠΎΡΡΠ°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ·ΠΎΠ² RemotingConfiguration.Configure() ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
static void Main(string[] args) {
// Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ WKO-ΠΎΠ±ΡΠ΅ΠΊΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΉΠ»Π° *.config.
RemotingConfiguration.Configure("SimpleRemoteObjectServer.exe.config");
Console.WriteLine("Π‘ΡΠ°ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°! ΠΠ»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ βΉEnterβΊ");
Console.ReadLine();
}
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² *.config ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ΠΠ»ΠΈΠ΅Π½ΡΡ ΡΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ *.config ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π² ΡΠ°ΠΉΠ»Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΈ WKO-ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ βΉclientβΊ. ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠ°ΠΉΠ»Ρ *.config ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΏ Π°Π³Π΅Π½ΡΠ° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° C# new, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Activator.GetObject(). ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ°ΠΉΠ» *.config ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ.
βΉconfigurationβΊ
βΉsystem.runtime.remotingβΊ
βΉapplicationβΊ
βΉclient displayName = "SimpleRemoteObjectClient"βΊ
βΉwellknown type=" SimpleRemotingAsm.RemoteMessageObject, SimpleRemotingAsm" url="http://localhost:32469/RemoteMsgObj.soap"/βΊ
βΉ/clientβΊ
βΉchannelsβΊ
βΉchannel ref="http"/βΊ
βΉ/channelsβΊ
βΉ/applicationβΊ
βΉ/system.runtime.remotingβΊ
βΉ/configurationβΊ
Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ Main() ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ°ΠΊ.
statiΡ void Main(string[] args) {
RemotingConfiguration.Configure("SimpleRemoteObjectClient.exe.config");
// ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°ΠΉΠ»Π° *.config ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΏ
// Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° 'new' .
RemoteMessageObject simple = new RemoteMessageObject();
simple.DisplayMessage("ΠΡΠΈΠ²Π΅Ρ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°!");
Console.WriteLine("Π‘Π΅ΡΠ²Π΅Ρ Π³ΠΎΠ²ΠΎΡΠΈΡ: {0}", simple.ReturnMessage());
Console.WriteLine("Π‘ΡΠ°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°! ΠΠ»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ βΉEnterβΊ");
Console.ReadLine();
}
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ. ΠΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠΆΠ΅Π»Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ TCP-ΠΊΠ°Π½Π°Π», ΡΠΎ Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ² url ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° βΉwellknownβΊ ΠΈ ref ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° βΉΡhannelβΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΠΌΠ΅ΡΡΠΎ http ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ tcp.
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΡΠΎΠ΅ΠΊΡΡ SimpleRemoteObjectServerWithConfig ΠΈ SimpleRemoteObjectClientWithConfig ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Ρ Π² ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ Π³Π»Π°Π²Π΅ 18 (ΠΎΠ±Π° ΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ SimpleRemotingAsm.dll).
Π Π°Π±ΠΎΡΠ° Ρ MBV-ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ
ΠΠ°ΡΠΈ ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»ΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ WKO-ΡΠΈΠΏΡ. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ WKO-ΡΠΈΠΏΡ (ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ) ΡΠ²Π»ΡΡΡΡΡ MBR-ΡΠΈΠΏΠ°ΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΡΡΡΠΏ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ Π½ΠΈΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π°Π³Π΅Π½ΡΠ°-ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠ°. Π ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΠΎΠΌΡ, MBV-ΡΠΈΠΏΡ ΡΠ²Π»ΡΡΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΏΠΈΡΠΌΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌΠΈ ΠΎΡΠΊΡΡΡΡΠΌΠΈ ΡΠ»Π΅Π½Π°ΠΌΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ MBR-ΡΠΈΠΏΠ°. ΠΡ ΡΠΆΠ΅ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ MBV-ΡΠΈΠΏ (ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ [Serializable]), Π½ΠΎ MBV-ΡΠΈΠΏ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Π²Ρ Π΅ΡΠ΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π»ΠΈ (Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΠΈΡΠ°ΡΡ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΡΡΠΎΠΊΠΎΠ²ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΡΠΎΡΠΎΠ½Π°ΠΌΠΈ). ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ MBR- ΠΈ MBV-ΡΠΈΠΏΠΎΠ² ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΡ Π±Π»ΠΎΠΊΠ°.
β’ ΠΠ±ΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ CarGeneralAsm.dll
β’ ΠΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° CarProviderClient.exe
β’ ΠΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ° CarProviderServer.exe
ΠΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ°ΠΉΠ»Ρ *.config, Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΎΠ² ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°
Π Ρ ΠΎΠ΄Π΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² Π³Π»Π°Π²Π΅ 17 ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠΈΠΏ JamesBondCar (Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ Radio ΠΈ Car). ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° CarGeneralAsm.dll Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΡΠΈΠΏΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ProjectsβAdd Existing Item ΠΈΠ· ΠΌΠ΅Π½Ρ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΡΠ²ΠΎΠΉ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ *.cs (Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Class1.cs ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π°Π»ΠΈΡΡ), ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠΆΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ [Serializable], ΠΎΠ½ΠΈ Π³ΠΎΡΠΎΠ²Ρ Π΄Π»Ρ ΠΌΠ°ΡΡΠ°Π»ΠΈΠ½Π³Π° ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ MBR-ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΈΠΏΡ JamesBondCar. Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ, Π²Π°Ρ MBR-ΠΎΠ±ΡΠ΅ΠΊΡ (CarProvider) Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ListβΉβΊ ΡΠΈΠΏΠΎΠ² JamesBondCar. Π’ΠΈΠΏ CarProvider ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ Π΄Π²Π° ΡΠ»Π΅Π½Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π°Π΄Π°Π½Π½ΡΠΉ ΡΠΈΠΏ JamesBondCar, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Ρ ListβΉβΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠΈΠΏΠΎΠ². ΠΠΎΡ Π²Π΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠ»Π°ΡΡΠ°.