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

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

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

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ особСнностСй Π»ΠΈΠ·ΠΈΠ½Π³Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Π‘AО-Ρ‚ΠΈΠΏΠΎΠ² ΠΈ WKO-синглСтов ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² нашСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ CAOCarGeneralAsm Π½ΠΎΠ²Ρ‹ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс LeaseInfo. БтатичСский Ρ‡Π»Π΅Π½ LeaseStats() этого класса Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π»ΠΈΠ·ΠΈΠ½Π³Π΅ для Ρ‚ΠΈΠΏΠ° CarProvider Π² ΠΎΠΊΠ½ΠΎ консоли сСрвСра (Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ using для пространства ΠΈΠΌΠ΅Π½ System.Runtime.Remoting.Lifetime, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ компилятору ΠΎ мСстС нахоТдСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ILease).

internal class LeaseInfo {

 public static void LeaseStats(ILease itfLease) {

  Console.WriteLine(***** Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Π»ΠΈΠ·ΠΈΠ½Π³Π΅ *****");

  Console.WriteLine("БостояниС Π»ΠΈΠ·ΠΈΠ½Π³Π°: {0}", itfLease.CurrentState);

  Console.WriteLine("ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя Π»ΠΈΠ·ΠΈΠ½Π³Π°: {0}:{1}", itfLease.InitialLeaseTime.Minutes, itfLease.InitialLeaseTime.Seconds);

  Console.WriteLine("Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя Π»ΠΈΠ·ΠΈΠ½Π³Π°: {0}:{1}", itfLease.CurrentLeaseTime.Minutes, itfLease.CurrentLeaseTime.Seconds);

  Console.WriteLine("ОбновлСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅: {0}:{1}", itfLease.RenewOnCallTime.Minutes, itfLease.RenewOnCallTime.Seconds);

  Console.WriteLine();

 }

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ LeaseInfo.LeaseStats() вызываСтся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² GetJBCByIndex() ΠΈ GetAllAutos() Ρ‚ΠΈΠΏΠ° CarProvider. ПослС пСрСкомпиляции ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² сСрвСра ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (снова для Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ систСма Visual Studio 2005 скопируСт ΡΠ°ΠΌΡƒΡŽ послСднюю ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ CarGeneralAsm.dll Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра), Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅Ρ‰Π΅ Ρ€Π°Π·. Окно консоли вашСго сСрвСра Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° Ρ‚ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 18.6.

Рис. 18.6. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ Π»ΠΈΠ·ΠΈΠ½Π³Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для CarProvider

ИзмСнСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² схСмы Π»ΠΈΠ·ΠΈΠ½Π³ΠΎΠ²ΠΎΠ³ΠΎ управлСния

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π»ΠΈΠ·ΠΈΠ½Π³Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²ΠΎ всСх случаях ΠΈ для всСх ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… БАО-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ WKO-синглСтов. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ установки, Ρƒ вас Π½Π° Π²Ρ‹Π±ΠΎΡ€ Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

β€’ Установки Π»ΠΈΠ·ΠΈΠ½Π³Π°, принятыС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π°ΠΉΠ»Π° *.config сСрвСра.

β€’ Установки Π»ΠΈΠ·ΠΈΠ½Π³Π°, принятыС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ срСдствами ΠΏΡƒΡ‚Π΅ΠΌ пСрСопрСдСлСния Ρ‡Π»Π΅Π½ΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса MarshalByRefObject.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ установки Π»ΠΈΠ·ΠΈΠ½Π³Π°, принятыС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ этими ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Π½ΠΈΡ†Π°. ΠŸΡ€ΠΈ использовании Ρ„Π°ΠΉΠ»Π° *.config сСрвСра установки Π»ΠΈΠ·ΠΈΠ½Π³Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊΠΎ всСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… процСсса сСрвСра. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² Ρ‚ΠΈΠΏΠ° MarshalByRefObject появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ установки Π»ΠΈΠ·ΠΈΠ½Π³Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π»ΠΈΠ·ΠΈΠ½Π³Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π°ΠΉΠ»Π° *.config, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ XML-Π΄Π°Π½Π½Ρ‹ΠΌ сСрвСра Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт β€Ήlifetimeβ€Ί.

β€Ήconfigurationβ€Ί

 β€Ήsystem.runtime.remotingβ€Ί

  β€Ήapplicationβ€Ί

   β€Ήlifetime leaseTime = "15M" renewOnCallTime = "5M"/β€Ί

   β€Ήserviceβ€Ί

    β€Ήactivated type="CarGeneralAsm.CarProvider, CarGeneralAsm" /β€Ί

   β€Ή/serviceβ€Ί

   β€Ήchannelsβ€Ί

    β€Ήchannel ref="tcp" port="32469" /β€Ί

   β€Ή/channelsβ€Ί

  β€Ή/application

 β€Ή/system.runtime.remotingβ€Ί

β€Ή/configurationβ€Ί

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² значСниях свойств leaseTime ΠΈ renewOnCallTime ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ суффикс M, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ сами, ΠΏΡ€ΠΈ установкС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для Π»ΠΈΠ·ΠΈΠ½Π³Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ использованиС ΠΌΠΈΠ½ΡƒΡ‚ Π² качСствС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ измСрСния. ΠŸΡ€ΠΈ нСобходимости числовыС значСния элСмСнта β€Ήlifetimeβ€Ί ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ суффиксы MS (миллисСкунды), S (сСкунды), Н (часы) ΠΈ Π΄Π°ΠΆΠ΅ D (Π΄Π½ΠΈ).

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° *.config сСрвСра Π²Ρ‹ измСняСтС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π»ΠΈΠ·ΠΈΠ½Π³Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ БАО-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ WKO-синглСта Π² Ρ€Π°ΠΌΠΊΠ°Ρ… сСрвСра. Как Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° InitializeLifetime() ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

public class CarProvider: MarshalByRefObject {

 public override object InitializeLifetimeService() {

  // ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π»ΠΈΠ·ΠΈΠ½Π³Π°.

  ILease itfLeaseInfo = (ILease)base.InitializeLifetimeService();

  // ИзмСнСниС установок.

  itfLeaseInfo.InitialLeaseTime = TimeSpan.FromMinutes(50);

  itfLeaseInfo.RenewOnCallTime = TimeSpan.FromMinutes(10);

  return itfLeaseInfo;

 }

 β€¦

}

Π—Π΄Π΅ΡΡŒ CarProvider устанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 50 ΠΌΠΈΠ½ΡƒΡ‚ для InitialLeaseTime ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10 – для RenewOnCallTime. Π‘Π½ΠΎΠ²Π° ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ прСимущСством пСрСопрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° InitializeLifetimeServices() являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, настройки ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

НаконСц, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ограничСния для Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π»ΠΈΠ·ΠΈΠ½Π³Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π‘AО-Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ WKO-синглСта, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ InitializeLifetimeServices() Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»ΠΎΡΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹, ΠΏΠΎ сути, ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΠœΠ’R-Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ всё врСмя, ΠΏΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ хост-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сСрвСра.

Настройка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π»ΠΈΠ·ΠΈΠ½Π³Π° Π½Π° сторонС сСрвСра

Π’Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° InitializeLifetimeServices() MBR-Ρ‚ΠΈΠΏΠΎΠΌ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π»ΠΈΠ·ΠΈΠ½Π³Π° Π²ΠΎ врСмя Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ°. Но Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π»ΠΈΠ·ΠΈΠ½Π³Π° послС Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ? ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ CarProvider ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€; соСдинСниС с ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ большого Π½Π°Π±ΠΎΡ€Π° записСй). ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ выполнСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ врСмя Π»ΠΈΠ·ΠΈΠ½Π³Π° Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² случаС, ΠΊΠΎΠ³Π΄Π° остаток Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ становится ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, врСмя Π»ΠΈΠ·ΠΈΠ½Π³Π° снова ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π»ΠΎΡΡŒ Π΄ΠΎ дСсяти ΠΌΠΈΠ½ΡƒΡ‚. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наслСдуСмыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ MarshalByRefObject.GetLifetimeService() ΠΈ ILease.Renew() Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ прСдлагаСтся Π½ΠΈΠΆΠ΅.

// ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π»ΠΈΠ·ΠΈΠ½Π³Π° Π½Π° сторонС сСрвСра.

// ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ это Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚ΠΈΠΏΠ° CarProvider.

public void DoLengthyOperation() {

 ILease itfLeaseInfo = (ILease)this.GetLifetimeService();

 if (itfLeaseInfo.CurrentLeaseTime.TotalMinutes β€Ή 1.0) itfLeaseInfo.Renew(TimeSpan.FromMiutes(10));

 // Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ опСрации…

}

Настройка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π»ΠΈΠ·ΠΈΠ½Π³Π° Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ возмоТностям ILease, Π΄ΠΎΠΌΠ΅Π½ прилоТСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π»ΠΈΠ·ΠΈΠ½Π³Π° CAO-Ρ‚ΠΈΠΏΠΎΠ² ΠΈ WKD-синглС-Ρ‚ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ осущСствляСтся ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ взаимодСйствиС. Для этого ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ RemotingServices.GetLifetimeService(). Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Ρ‡Π»Π΅Π½Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ссылку Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.

// ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π»ΠΈΠ·ΠΈΠ½Π³Π° Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

CarProvider ср = new CarProvider(сars);

ILease itfLeaseInfo = (ILease)RemotingServices.GetLifetimeServiсС(cp);

if (itfLeaseInfo.CurrentLeaseTime.TotalMinutes β€Ή 10.0) itfLeaseInfo.Renew(TimeSpan.FromMinutes(1000));

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠΌΠ΅Π½ прилоТСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π³ΠΎΡ‚ΠΎΠ² Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. НапримСр, Ссли ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, содСрТащий 100 страниц тСкста, ΠΎΡ‡Π΅Π½ΡŒ Π²Π΅Π»ΠΈΠΊΠ° Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ БАО-Ρ‚ΠΈΠΏ ΠΈΠ»ΠΈ WKO-синглСт ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° Ρ€Π°ΠΌΠΊΠΈ ΠΎΡ‚Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ для процСсса Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. НадСюсь, Π²Ρ‹ ΡƒΠ»ΠΎΠ²ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰ΡƒΡŽ идСю, хотя здСсь, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π±ΠΎΠ»Π΅Π΅ "элСгантным" Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния.

Бпонсоры Π»ΠΈΠ·ΠΈΠ½Π³Π° сСрвСра (ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°)

Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅ΠΌΠΎΠΉ нашСго связанного с Π»ΠΈΠ·ΠΈΠ½Π³ΠΎΠΌ обсуТдСния Ρ†ΠΈΠΊΠ»Π° сущСствования БАО-Ρ‚ΠΈΠΏΠΎΠ² ΠΈ WKO-синглСтов Π±ΡƒΠ΄Π΅Ρ‚ спонсорство Π»ΠΈΠ·ΠΈΠ½Π³Π°. Как Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° БАО-Ρ‚ΠΈΠΏΠ° ΠΈ WKO-синглСта ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π»ΠΈΠ·ΠΈΠ½Π³Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСсколькими способами, ΠΊΠ°ΠΊ Π½Π° сторонС сСрвСра, Ρ‚Π°ΠΊ ΠΈ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Но, нСзависимо ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π»ΠΈΠ·ΠΈΠ½Π³Π° Ρ‚ΠΈΠΏΠ°, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ врСмя Π»ΠΈΠ·ΠΈΠ½Π³Π° MBR-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° истСчСт. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ срСда выполнСния ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² "мусорник"… Π½Ρƒ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚.

Π‘ΡƒΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сборщику мусора, срСда выполнСния провСряСт, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ MBR-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ зарСгистрированных спонсоров Π»ΠΈΠ·ΠΈΠ½Π³Π°. ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, спонсор – это Ρ‚ΠΈΠΏ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс ISponsor, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.

public interface System.Runtime.Remoting.Lifetime.ISponsor {

 TimeSpan Renewal(ILease lease);

}

Если срСда выполнСния ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρƒ MBR-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° имССтся спонсор, этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сразу ΠΆΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ сборщику мусора, Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Renewal() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° спонсора, Ρ‡Ρ‚ΠΎΠ±Ρ‹ (Π΅Ρ‰Π΅ Ρ€Π°Π·) Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ врСмя ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π»ΠΈΠ·ΠΈΠ½Π³Π°. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли окаТСтся, Ρ‡Ρ‚ΠΎ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ MBR-Ρ‚ΠΈΠΏΠ° спонсора Π½Π΅Ρ‚, Ρ†ΠΈΠΊΠ» сущСствования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ закончится.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ создали ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ISponsor ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Renewal() для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΈΠΏ TimeSpan). Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ с Π΄Π°Π½Π½Ρ‹ΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ? И снова это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сдСлано Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ прилоТСния сСрвСра, Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ прилоТСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.