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

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

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

Π€Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия

Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ построили распрСдСлённоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ слой ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ взаимодСйствия .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β€Ήβ€Ί ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². Π’ΠΎΡ‚ вСсь ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ для Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° класса.