рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢

рдЖрдЬ, рдЖрдкрдХрд╛ рдзреНрдпрд╛рди AtContent.com рд╕реЗрд╡рд╛ рдХреЗ рд╡рд╛рд╕реНрддреБ рд╕рдорд╛рдзрд╛рди рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рджреВрд╕рд░рд╛ рд▓реЗрдЦ рд╣реИред

AtContent.com рд╕реЗрд╡рд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рднреВрдорд┐рдХрд╛ рдХреЗ рднреАрддрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдорд┐рд▓рд╛ред рдПрд╕рдбреАрдХреЗ рдХреЗ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдХреЛрдб рдХреА рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рднреВрдорд┐рдХрд╛ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдпрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рд╛рд░ HTTP рдкрд░ рд░реЛрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рд╣реИред рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рднреВрдорд┐рдХрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдЪрд┐рддреНрд░рд╛ 1. рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рдирд╛

рдмрд┐рдВрджреБ рдкреНрд░рдХрд╛рд░ рдЖрдВрддрд░рд┐рдХ рд╣реИ, рдФрд░ рдХреБрдЫ рдирд┐рд░реНрд▓рд┐рдкреНрдд рдирд┐рдЬреА рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░ рдХреЗ рдЕрдВрджрд░ рд╣реЛред рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡реЗрдм рд░реЛрд▓ рдореЗрдВ рдПрдХ рдЬреЗрдиреЗрд░рд┐рдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ Communicator.ashx рд╣реИ


рдЪрд┐рддреНрд░рд╛ 2. рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдирд╛

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╣рд▓ рд╣реЛрдирд╛ рдмрд╛рдХреА рд╣реИред

рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рд╣реИред рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рд╛ рд╣реИрдВрдбрд▓рд░ рдмрд╛рд╣рд░реА рдкрддреЗ рдФрд░ рдкреЛрд░реНрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдкрд░ рдЗрд╕рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ POST рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдЬреЛ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред

рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рддрдХ рдкрд╣реБрдВрдЪ рд░рд╣реА рд╣реИред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, SDK рдПрдХ рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - ServiceRuntimeред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреБрдХреНрдд рдирд╛рдорд╕реНрдерд╛рди рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.ServiceRuntime; 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрди рднреВрдорд┐рдХрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП POST рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ:
 //   var Params = new Dictionary<string, string>(); Params["key"] = "key_value"; //   POST- string STDIN = ""; foreach (var Item in Params) { STDIN += Item.Key + "=" + HttpUtility.UrlEncode(Item.Value, Encoding.UTF8) + "&"; } byte[] sentData = Encoding.UTF8.GetBytes(STDIN); foreach (RoleInstance roleInst in RoleEnvironment.Roles["WebRole1"].Instances) { // WebRequest    WebRequest reqPOST = WebRequest.Create( "http://" + roleInst.InstanceEndpoints["InterEndpoint"].IPEndpoint + "/Communicator.ashx"); reqPOST.Method = "POST"; reqPOST.Timeout = 120000; reqPOST.ContentType = "application/x-www-form-urlencoded"; //  reqPOST.ContentLength = sentData.Length; System.IO.Stream sendStream = reqPOST.GetRequestStream(); sendStream.Write(sentData, 0, sentData.Length); sendStream.Close(); System.Net.WebResponse resp = reqPOST.GetResponse(); System.IO.Stream stream = resp.GetResponseStream(); System.IO.StreamReader sr = new StreamReader(stream); string s = sr.ReadToEnd(); } 

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ WebRole1 рднреВрдорд┐рдХрд╛ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреИрд╕реЗ рднреЗрдЬреЗрдВред рдЖрдк рд╢рдмреНрджрдХреЛрд╢ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдп рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╛ рдХрд┐рд╕реА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рд░реЛрд▓рдЗрдиреНрд╡рд╛рдпрд░рдореЗрдВрдЯ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдЪреБрдиреЗрдВред

рдЙрд╕реА рд╕рдордп, Communicator.ashx рдореЗрдВ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ POST рдЕрдиреБрд░реЛрдз рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ:
 //    if (context.Request.Form["key"] != "key_value") return; //  

рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо рдкрд░рд┐рджреГрд╢реНрдп рдЙрджрд╛рд╣рд░рдг рдХреИрд╢ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред

рд╕реЗрд╡рд╛ рдЙрджрд╛рд╣рд░рдг (рд╡рд░реНрдХрд░ рд░реЛрд▓) рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкрд░рд┐рджреГрд╢реНрдп рдХрддрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк HTTP рдкрд░ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рд╕реЗрд╡рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ HTTPListener рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧреАред
 private HttpListener listener = null; private AutoResetEvent connectionWaitHandle = new AutoResetEvent(false); public override void Run() { //      HttpListener Thread HttpListenerThread = null; while (true) { if (HttpListenerThread == null) { HttpListenerThread = new Thread(new ThreadStart(HttpListenerHandler)); HttpListenerThread.IsBackground = true; HttpListenerThread.Start(); } Thread.Sleep(1000); } } protected void HttpListenerHandler() { //   HttpListener     ServiceEndpoint if (listener == null) { listener = new HttpListener(); var HostEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["ServiceEndpoint"].IPEndpoint.ToString(); listener.Prefixes.Add(string.Format("http://{0}/", HostEndpoint)); listener.Start(); } while (true) { IAsyncResult result = listener.BeginGetContext(HandleAsyncConnection, listener); connectionWaitHandle.WaitOne(); } } private void HandleAsyncConnection(IAsyncResult result) { // POST- HttpListener listener = (HttpListener)result.AsyncState; HttpListenerContext context = listener.EndGetContext(result); connectionWaitHandle.Set(); var Request = context.Request; var Response = context.Response; if (Request.HttpMethod == "POST") { Stream BodyStream = context.Request.InputStream; var encoding = context.Request.ContentEncoding; var reader = new StreamReader(BodyStream, encoding); var PostParams = HttpUtility.ParseQueryString(reader.ReadToEnd(), encoding); if (PostParams["key"] != "key_value") return; //  } Response.OutputStream.Close(); } 

рдпрд╣рд╛рдБ WorkerRole.cs рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ, рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рдЬрд┐рд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ System.Web рдирд╛рдорд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ WorkerRole рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕рдВрджрд░реНрдн рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ рд╣реА рднреВрдорд┐рдХрд╛ рдХреЗ рднреАрддрд░ рдФрд░ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдорд┐рд▓реАред рдЗрд╕ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВред рдореИрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ - "рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХреИрд╢рд┐рдВрдЧ рдбреЗрдЯрд╛ рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛" рдФрд░ "рдХреНрд▓рд╛рдЙрдб рдХреНрдпреВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдХреБрд╢рд▓ рдкреНрд░рдмрдВрдзрди (рдХрддрд╛рд░)"ред

рдХреБрдЫ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддрдВрддреНрд░ рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдХреЗ рд▓рд┐рдП рдУрдкрдирд╕реЛрд░реНрд╕ рд╕реАрдкреАрдПрд▓рдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рдЬреЛ рдЬрд▓реНрдж рд╣реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рд╣реЛрдЧрд╛ред

рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрдврд╝реЗрдВ:

Source: https://habr.com/ru/post/In140461/


All Articles