рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рджреЛ ASP.NET рдФрд░ рдлреНрд▓реЗрдХреНрд╕ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВредрдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдлреНрд▓реИрд╢ рдЖрдорддреМрд░ рдкрд░ рд╕рдореГрджреНрдз рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИ, рдФрд░ рдПрдХреНрд╢рдирд╕реНрдХреНрд░рд┐рдкреНрдЯ 3 рдФрд░ рдлреНрд▓реЗрдХреНрд╕ рддрдХрдиреАрдХ рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рд╕рд╛рде, рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд╢реА рдмрди рдЧрдпрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЖрдк рдЖрд░рдЖрдИрдП рдФрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдзрдиреНрдпрд╡рд╛рдж, рдПрдбреЛрдм рдПрдЖрдИрдЖрд░) рджреЛрдиреЛрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рджреВрд╕рд░реА рдУрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ASP.NET рд╣реИ - рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдгред рдЖрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рджреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдпрд╛ рддреЛ WebForms + Web Services, рдпрд╛ ASP.NET MVC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, REST рд╢реИрд▓реА рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдПред
рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдЦрддреНрдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЙрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддреЛ рдпрд╣ рд╣реИ -
- рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 рдкреНрд░реЛрдлреЗрд╢рдирд▓
- рдлреНрд▓реИрд╢ рдмрд┐рд▓реНрдбрд░ 4 рдорд╛рдирдХ
рдлреНрд▓реЛрд░реАрди рдПрдлрдПрдХреНрд╕ рд╕реЗ рдорд┐рд▓реЗрдВ
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдПрдХ рдРрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдЕрдХреНрд╕рд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдЕрдиреНрдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░реЗрдЧрд╛ред рдЖрдорддреМрд░ рдкрд░, рдлреНрд▓реЗрдХреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, AMF- рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдпрд╛ RTMP- рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлреНрд▓реЛрд░реАрдирдПрдлрдПрдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╕рдорд░реНрдерди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд╛рдЗрдЯ рдФрд░ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ
рдпрд╣рд╛рдБ ред
рдЦрд╛рдирд╛ рдкрдХрд╛рдиреЗ рдХрд╛ рд╕рд░реНрд╡рд░
ASP.NET рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдПрдХ рдорд┐рдиреА-рд╕рд░реНрд╡рд░ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рд▓реЙрдЬрд┐рдХ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, C # рдореЗрдВ рдПрдХ рдирдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ ServiceLibrary рдирд╛рдо рджреЗрдВред
рд╕рдХреНрд░рд┐рдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬреЛ рдореЗрд╕реЗрдЬрд┐рдВрдЧ рдПрдбреЗрдкреНрдЯрд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рдФрд░ ISessionListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
public class AppAdapter : MessagingAdapter, ISessionListener { public AppAdapter() { ClientManager.AddSessionCreatedListener(this); } #region ISessionListener Members public void SessionCreated(IClient client) { // client.AddSessionDestroyedListener(this); } public void SessionDestroyed(IClient client) { // } #endregion public override object Invoke(IMessage message) { // return null; } }
рд░реАрдореЛрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреАред
[RemotingService()] public class DataService { public DataService() { }
рдЗрд╕ рдкрд░ рдЕрдм, рдорд┐рдиреА-рд╕рд░реНрд╡рд░ рдХреЛрдб рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╡рд░реНрдЧ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рддрдм рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдХреЛрдИ рдирдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЙрд╕реА рдбреЛрдореЗрди рдореЗрдВ ASP.NET рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдпрд╛рд░реА
рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди ASP.NET 4 рдкрд░ рдЪрд▓реЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред
рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдлреНрд▓реЛрд░реАрдирдПрдлрдПрдХреНрд╕ рдПрдХ рдЧреЗрдЯрд╡реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдПрдПрд╕рдПрдХреНрд╕рдПрдХреНрд╕ рдкреЗрдЬ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдлреНрд▓реЛрд░реАрди рдХрд╛ http рдореЙрдбреНрдпреВрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред рд╣рдо рдЗрд╕ рдкреНрд░рд╢реНрди рдкрд░ рдиреАрдЪреЗ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдПрдХ рдирд┐рдпрдорд┐рдд ASP.NET рдкреЗрдЬ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ Gateway.aspx рдХрд╣реЗрдВрдЧреЗред
Web.config рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
<configuration> <configSections> <sectionGroup name="fluorinefx"> <section name="settings" type="FluorineFx.Configuration.XmlConfigurator, FluorineFx" requirePermission="false"/> </sectionGroup> </configSections> <fluorinefx> <settings> <rtmpServer> <threadpool minWorkerThreads="0" maxWorkerThreads="25" idleTimeout="60000"/> <rtmpConnection pingInterval="0" maxInactivity="60000" maxHandshakeTimeout="0"/> <rtmptConnection pingInterval="5000" maxInactivity="60000" maxHandshakeTimeout="5000"/> <rtmpTransport receiveBufferSize="4096" sendBufferSize="4096" tcpNoDelay="true"/> </rtmpServer> </settings> </fluorinefx> <system.web> <compilation debug="true" targetFramework="4.0" /> <httpModules> <add name="FluorineGateway" type="FluorineFx.FluorineGateway,FluorineFx" /> </httpModules> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false"/> <modules runAllManagedModulesForAllRequests="true"> <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx"/> </modules> </system.webServer> </configuration>
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдлреНрд▓реЛрд░реАрдирдПрдлрдПрдХреНрд╕ рдХреЗрд╡рд▓ WEB-INF рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рд╕рд░реНрд╡рд░ BlazeDS рдФрд░ LifeCycle рдбреЗрдЯрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредрдЕрдм рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдлреНрд▓реЗрдХреНрд╕ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ WEB-INF рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБред
рд╕реЗрд╡рд╛рдУрдВ- config.xml рдирд╛рдордХ рдПрдХ xml рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВред
<?xml version="1.0" encoding="utf-8" ?> <services-config> <services> <service-include file-path="remoting-config.xml" /> <service-include file-path="messaging-config.xml" /> </services> <channels> <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> <endpoint uri="http://{server.name}:{server.port}/Gateway.aspx" class="flex.messaging.endpoints.AMFEndpoint"/> <properties> </properties> </channel-definition> <channel-definition id="my-rtmp" class="mx.messaging.channels.RTMPChannel"> <endpoint uri="rtmp://{server.name}:1950" class="flex.messaging.endpoints.RTMPEndpoint"/> </channel-definition> </channels> </services-config>
рдКрдкрд░, рд╣рдордиреЗ 2 рдЕрдВрдд-рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛: рдПрдПрдордПрдл рдФрд░ рдЖрд░рдЯреАрдПрдордкреА рдЪреИрдирд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рд░реАрдореЛрдЯрд┐рдВрдЧ рдФрд░ / рдпрд╛ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕реНрдерд╛рдиред рдПрдХ рд╣реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
рд░реАрдореЛрдЯрд┐рдВрдЧ- config.xml рдФрд░
рдореИрд╕реЗрдЬрд┐рдВрдЧ-config.xml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВред
рдлреНрд▓реЗрдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ
рдЕрдм рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдлреНрд▓реИрд╢ рдмрд┐рд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдлреНрд▓реЗрдХреНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред рдЕрдЧрд▓рд╛, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧреБрдг> рдлреНрд▓реЗрдХреНрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдЦреЛрд▓реЗрдВред "рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдХрд▓рдХ рддрд░реНрдХ" рдкрд╛рда рдмреЙрдХреНрд╕ рдореЗрдВ, рдирд┐рдореНрди рдкрдВрдХреНрддрд┐
-services рдЬреЛрдбрд╝реЗрдВ
"{project_location} \ WEB-INF \ flex \ services-config.xml" ред рдФрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, RTMPChannel рд╕рдорд░реНрдерди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП fds.swc рдХрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрд▓рд╕реАрдбреАрдПрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдПрд▓рд╕реАрдбреАрдПрд╕ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИред рдЖрд╡реЗрджрди рдореЗрдВ * .mxml рдлрд╝рд╛рдЗрд▓, рдирд┐рдореНрди рдХреЛрдб рдЪрд┐рдкрдХрд╛рдПрдБ:
<fx:Declarations> <mx:Consumer id="consumer" destination="data_destination" message="messageHandler(event)"/> <mx:RemoteObject id="dataRO" destination="DataDest"> <mx:method name="GetData" result="GetDataResult(event)" fault="GetDataFault(event)" /> </mx:RemoteObject> </fx:Declarations> <fx:Script> <![CDATA[ private function GetDataResult(event:ResultEvent):void { var result:String = event.result as String; // } private function GetDataFault(event:FaultEvent):void{ var error:String = ObjectUtil.toString(event.fault); // } private function messageHandler(event:MessageEvent):void { var msg:IMessage = event.message; var type:object = msg.body; // } ]]> </fx:Script>
рдФрд░ рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рд╕рд░реНрд╡рд░ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ AppAdapter рдХреЗ рд▓рд┐рдП SendMessage рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред
AppAdapter.cs
public class AppAdapter : MessagingAdapter, ISessionListener { public override object Invoke(IMessage message) { // MessageService messageService = this.Destination.Service as MessageService; messageService.PushMessageToClients(message); return null; } public static void SendMessage(string message) { MessageBroker msgBroker = MessageBroker.GetMessageBroker(null); AsyncMessage msg = new AsyncMessage(); msg.destination = "data_destination"; msg.headers.Add(AsyncMessage.SubtopicHeader, "client"); msg.headers.Add(AsyncMessage.EndpointHeader, "my-rtmp"); msg.headers.Add(AsyncMessage.RemoteCredentialsHeader, string.Empty); msg.headers.Add(AsyncMessage.FlexClientIdHeader, Guid.NewGuid().ToString("D")); msg.clientId = Guid.NewGuid().ToString("D"); msg.messageId = Guid.NewGuid().ToString("D"); msg.timestamp = Environment.TickCount; msg.body = message; msgBroker.RouteMessage(msg); } }
рдЕрдВрддрднрд╛рд╖рдг
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдлреНрд▓реЗрдХреНрд╕ + ASP.NET рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдореБрдЦреНрдп рд╕рд╛рд░ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдмреЗрд╢рдХ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реЗ рдХреНрд╖рдг, рдХрдбрд╝рд╛рдИ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ, рдФрд░ рди рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ, рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд▓реА рдмрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХред
рдлреНрд▓реЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛрдб рдФрд░ рд╡реАрдПрд╕ 2010 рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рд╕реНрд╡рдпрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред