рдЖрдЬ, рдЖрдкрдХрд╛ рдзреНрдпрд╛рди AtContent.com рд╕реЗрд╡рд╛ рдХреЗ рд╡рд╛рд╕реНрддреБ рд╕рдорд╛рдзрд╛рди рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рджреВрд╕рд░рд╛ рд▓реЗрдЦ рд╣реИред
AtContent.com рд╕реЗрд╡рд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рднреВрдорд┐рдХрд╛ рдХреЗ рднреАрддрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдорд┐рд▓рд╛ред рдПрд╕рдбреАрдХреЗ рдХреЗ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдХреЛрдб рдХреА рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рднреВрдорд┐рдХрд╛ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдпрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рд╛рд░ HTTP рдкрд░ рд░реЛрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рд╣реИред рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рднреВрдорд┐рдХрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЪрд┐рддреНрд░рд╛ 1. рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рдирд╛рдмрд┐рдВрджреБ рдкреНрд░рдХрд╛рд░ рдЖрдВрддрд░рд┐рдХ рд╣реИ, рдФрд░ рдХреБрдЫ рдирд┐рд░реНрд▓рд┐рдкреНрдд рдирд┐рдЬреА рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░ рдХреЗ рдЕрдВрджрд░ рд╣реЛред рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡реЗрдм рд░реЛрд▓ рдореЗрдВ рдПрдХ рдЬреЗрдиреЗрд░рд┐рдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ Communicator.ashx рд╣реИ
рдЪрд┐рддреНрд░рд╛ 2. рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдирд╛рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╣рд▓ рд╣реЛрдирд╛ рдмрд╛рдХреА рд╣реИред
рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рд╣реИред рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рд╛ рд╣реИрдВрдбрд▓рд░ рдмрд╛рд╣рд░реА рдкрддреЗ рдФрд░ рдкреЛрд░реНрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдкрд░ рдЗрд╕рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ POST рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдЬреЛ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред
рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рддрдХ рдкрд╣реБрдВрдЪ рд░рд╣реА рд╣реИред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, SDK рдПрдХ рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - ServiceRuntimeред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреБрдХреНрдд рдирд╛рдорд╕реНрдерд╛рди рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.ServiceRuntime;
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрди рднреВрдорд┐рдХрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП POST рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ:
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ WebRole1 рднреВрдорд┐рдХрд╛ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреИрд╕реЗ рднреЗрдЬреЗрдВред рдЖрдк рд╢рдмреНрджрдХреЛрд╢ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдп рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╛ рдХрд┐рд╕реА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рд░реЛрд▓рдЗрдиреНрд╡рд╛рдпрд░рдореЗрдВрдЯ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдЪреБрдиреЗрдВред
рдЙрд╕реА рд╕рдордп, Communicator.ashx рдореЗрдВ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ POST рдЕрдиреБрд░реЛрдз рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ:
рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо рдкрд░рд┐рджреГрд╢реНрдп рдЙрджрд╛рд╣рд░рдг рдХреИрд╢ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред
рд╕реЗрд╡рд╛ рдЙрджрд╛рд╣рд░рдг (рд╡рд░реНрдХрд░ рд░реЛрд▓) рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкрд░рд┐рджреГрд╢реНрдп рдХрддрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк HTTP рдкрд░ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рд╕реЗрд╡рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ HTTPListener рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧреАред
private HttpListener listener = null; private AutoResetEvent connectionWaitHandle = new AutoResetEvent(false); public override void Run() {
рдпрд╣рд╛рдБ WorkerRole.cs рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ, рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рдЬрд┐рд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ System.Web рдирд╛рдорд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ WorkerRole рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕рдВрджрд░реНрдн рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ рд╣реА рднреВрдорд┐рдХрд╛ рдХреЗ рднреАрддрд░ рдФрд░ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдорд┐рд▓реАред рдЗрд╕ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВред рдореИрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ - "рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХреИрд╢рд┐рдВрдЧ рдбреЗрдЯрд╛ рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛" рдФрд░ "рдХреНрд▓рд╛рдЙрдб рдХреНрдпреВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдХреБрд╢рд▓ рдкреНрд░рдмрдВрдзрди (рдХрддрд╛рд░)"ред
рдХреБрдЫ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддрдВрддреНрд░ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдХреЗ рд▓рд┐рдП рдУрдкрдирд╕реЛрд░реНрд╕ рд╕реАрдкреАрдПрд▓рдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рдЬреЛ рдЬрд▓реНрдж рд╣реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рд╣реЛрдЧрд╛ред
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрдврд╝реЗрдВ: