рд╡реЗрдмрдПрдкреАрдЖрдИ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдЙрдкрдпреЛрдЧ: рд╕реНрд╡рдпрдВ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЖрд░рдИрдПрд╕рдЯреА рд╕реЗрд╡рд╛рдПрдВ

ASP.NET WebAPI рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ REST рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рдПрдХ рддрд░рдл рдкреВрд░реА рддрд░рд╣ рд╕реЗ REST рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛, рдФрд░ рджреВрд╕рд░реА рдУрд░ ASP.NET рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреА рдкреВрд░реА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ред

рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╣реА WebAPI рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛ рдЪреБрдХреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк ApiExplorer рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрд╡-рджрд╕реНрддрд╛рд╡реЗрдЬ рдПрдкреАрдЖрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред

рд╡реЗрдмрдПрдкреАрдЖрдИ рдХреА рдПрдХ рдФрд░ рдмрдбрд╝реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рд╡реЗрдмрдПрдкреАрдЖрдИ рдХреА рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ (рд╕реЗрд▓реНрдл рд╣реЛрд╕реНрдЯрд┐рдВрдЧ) рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ WebAPI рдкрд░ рдЖрдзрд╛рд░рд┐рдд REST рд╕реЗрд▓реНрдлрд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рд╕реНрд╡рдпрдВ рдХреА рдореЗрдЬрдмрд╛рдиреА REST рд╕реЗрд╡рд╛


рд╕реЗрд╡рд╛ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ IIS рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╕реЗрд╡рд╛ рдХрд┐рд╕реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рд╕реНрд╡рдпрдВ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдЙрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдЖрдИрдЖрдИрдПрд╕ рд╕рд░реНрд╡рд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЬрд┐рд╕ рдкрд░ рдЖрдИрдЖрдИрдПрд╕ рдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг рдЬрдЯрд┐рд▓ рдпрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред

рдПрдХ рдпрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛, рд╡реЗрдмрдПрдкреАрдЖрдИ рдЖрдкрдХреЛ рдЖрдИрдЖрдИрдПрд╕-рд╕реНрд╡рддрдВрддреНрд░ рд╕реЗрд╡рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕реЗрд╡рд╛


рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╕реНрд╡рдпрдВ-рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рдХреЗ рд▓рд┐рдП C # рдореЗрдВ рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдХрдВрд╕реЛрд▓-рдЖрдзрд╛рд░рд┐рдд рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдБред

NuGet рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, AspNetWebApi.Selfhost рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ-рдкреИрдХреЗрдЬ AspNetWebApi.Selfhost

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

рд╕реЗрд▓реНрдлрд╣реЙрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдХрджрдо рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди HttpSelfHostConfiguration рд╡рд░реНрдЧ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИред рдиреАрдЪреЗ рдПрдХ рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

var selfHostConfiguraiton = new HttpSelfHostConfiguration("http://localhost:5555"); selfHostConfiguraiton.Routes.MapHttpRoute( name: "DefaultApiRoute", routeTemplate: "api/{controller}", defaults: null ); 

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдкрддрд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреА рд╣реИред рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╕рд░реНрд╡рд░ рд░реВрдЯрд┐рдВрдЧ рддрдВрддреНрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЙрд╕ рдкрд░ рдЕрдкрдиреЗ REST API рдХреЛ рдЪрд▓рд╛ рд╕рдХреЗрдВред

рдЕрдЧрд▓рд╛ рдХрджрдо рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЕрдиреНрдп рд╡рд░реНрдЧ HttpSelfHostServer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдиреАрдЪреЗ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рд╕реЗрд▓реНрдлрд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ:

 using (var server = new HttpSelfHostServer(selfHostConfiguraiton)) { server.OpenAsync().Wait(); Console.ReadLine(); } 

рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдПрдХ REST рд╕реЗрд╡рд╛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╡реЗрдм рдПрдкреАрдЖрдИ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ProductController рдирд╛рдоред рдЙрддреНрдкрд╛рдж рдирд╛рдордХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ:

 public class Product { public int ID { get; set; } public string Name { get; set; } public string Description { get; set; } } 

рдирдП рдмрдирд╛рдП рдЧрдП ProductController рдореЗрдВ, рдирдпрд╛ GetAllProducts рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:

 public IList<Product> GetAllProducts() { return new List<Product>(){ new Product(){ID = 1, Name="Product 1", Description="Desc 1"}, new Product(){ID = 2, Name="Product 2", Description="Desc 2"}, new Product(){ID = 3, Name="Product 3", Description="Desc 3"}, }; } 

рд╕рдВрдШрд░реНрд╖реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдЧреЗрдЯ () рд╡рд┐рдзрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреБрдЫ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рд╕реБрдирдиреЗ рд╡рд╛рд▓рд╛ рд╕рд░реНрд╡рд░ рд╣реЛрдЧрд╛, рдЖрд╡реЗрджрди рдХреЛ рдЙрдиреНрдирдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рд╕рдВрдХрд▓рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ VS2012 рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ URL рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП Netsh.exe рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдЧреАред

рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдЪрд▓рд╛рдПрдБред

рдЕрдм, рдЬрдм рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд╣рдо selfhosting рд╕реЗрд╡рд╛ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ IIS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрд╕ http: // localhost: 5555 / рдПрдкреАрдЖрдИ / рдЙрддреНрдкрд╛рдж / рдкрд░ рдЬрд╛рдПрдВ ред рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдлрд╝рд┐рдбрд▓рд░ (рдЪрд┐рддреНрд░ 1) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

clip_image001
рдЪрд┐рддреНрд░ 1ред рдПрдХ рд╕реЗрд▓реНрдлрд╣реЙрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо

рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд▓реНрдлрд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛рдПрдВ рдЪрд▓рд╛рдирд╛


рд╕реЗрд▓реНрдлрд╣реЙрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред

рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ TopShelf рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред NuGet рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

рд╕реНрдерд╛рдкрд┐рдд-рдкреИрдХреЗрдЬ topshelf

рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА, рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдХреЛрдб рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЙрддреНрдкрд╛рдж рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдореЗрдВ рд░рдЦрд╛:

 class ProductService { private readonly HttpSelfHostServer server; public ProductService() { var selfHostConfiguraiton = new HttpSelfHostConfiguration("http://127.0.0.1:5555"); selfHostConfiguraiton.Routes.MapHttpRoute( name: "DefaultApiRoute", routeTemplate: "api/{controller}", defaults: null ); server = new HttpSelfHostServer(selfHostConfiguraiton); } public void Start() { server.OpenAsync(); } public void Stop() { server.CloseAsync(); server.Dispose(); } } 

рддрдм рд╣рдо TopShelf API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдХреЗ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 static void Main(string[] args) { HostFactory.Run(x => { x.Service<ProductService>(s => { s.SetServiceName("ProductService Example"); s.ConstructUsing(name => new ProductService()); s.WhenStarted(svc => svc.Start()); s.WhenStopped(svc => svc.Stop()); }); x.RunAsLocalSystem(); x.SetDescription("ProductService WebAPI selfhosting Windows Service Example"); x.SetDisplayName("ProductService Example"); x.SetServiceName("ProductService"); }); } 

рдпрд╣рд╛рдВ, TopShelf рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕реЗрд╡рд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ, рдЗрд╕рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рд░реЛрдХ рдХреЗ рддрд░реАрдХреЛрдВ, рд╕реЗрд╡рд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдЙрд╕рдХреЗ рдирд╛рдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдХреЗ рд╕реЗрд╡рд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред

рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рдЕрдм рдЖрдк рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

WebApiSelfhosting рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ

рд╕реЗрд╡рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдПрдЧреА (рдЪрд┐рддреНрд░ 2)ред

clip_image002
рдЕрдВрдЬреАрд░ред реиред Windows рд╕реЗрд╡рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рдЕрдм, рдпрджрд┐ рдЖрдк рд╡рд┐рдВрдбреЛрдЬ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдирд╛ рдЖрд╡реЗрджрди (рдЪрд┐рддреНрд░ 3) рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

clip_image003
рдЪрд┐рддреНрд░ 3ред рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛ рд╕реВрдЪреА рдореЗрдВ рд╕реЗрд╡рд╛

рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЪрд┐рддреНрд░ 4)

clip_image004
рдЪрд┐рддреНрд░ 4ред рд╕реЗрд╡рд╛ рд╢реБрд░реВ

рдЖрдЗрдП рдлрд╝рд┐рдбрд▓рд░ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рдХреА рдЧрдИ рд╕реЗрд▓реНрдлрд╣реЙрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЖрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдПрдХ рд╕реЗрд╡рд╛ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

WebApiSelfhosting рдХреА рд╕реНрдерд╛рдкрдирд╛ рд░рджреНрдж рдХрд░реЗрдВ

рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ ASP.NET WebAPI рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рдЬрд╛рдБрдЪ рдХреАред рд╕реНрд╡рдпрдВ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬреЛ рдХрд┐ рд╡реЗрдмрдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЖрдк REST рд╕реЗрд╡рд╛рдПрдБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП IIS рд╕рд░реНрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдЬрд┐рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

ASP.NET WebAPI рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЯреВрд▓ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЖрдк рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 RC рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрддреЗ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: http://vs2012.ru/ ред

рдЕрдВрддрд┐рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб (рд╕рднреА рдкреИрдХреЗрдЬ рдФрд░ рдмрд╛рдЗрдирд░реА рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде) sdrv.ms/K9F7Hs рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ

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


All Articles