{"id":276237,"date":"2016-03-16T12:10:18","date_gmt":"2016-03-16T09:10:18","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=276237"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=276237","title":{"rendered":"\u0413\u0434\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f UI \u043f\u0440\u0438 Domain Driven Design? \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439"},"content":{"rendered":"\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/305\/60f\/b36\/30560fb360d44db3a880901bdf4733ef.jpg\" \/><\/div>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u0442\u0440\u0451\u0445-\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445-\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 .NET (Web API, Web API OData, WCF net.tcp, WCF Data Services). <\/p>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u041f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430<\/h3>\n<p>  \u0427\u0430\u0441\u0442\u043e \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0447\u0435\u0433\u043e-\u043b\u0438\u0431\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u041f\u041e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <b>\u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438<\/b>, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 <b>Domain Driven Design<\/b>. \u0421\u0443\u0442\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0438\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043d\u0438\u043c\u0438. \u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. <\/p>\n<p>  \u041a\u0430\u043a \u043f\u0438\u0441\u0430\u043b \u0424\u0430\u0443\u043b\u0435\u0440 \u0432 <a href=\"http:\/\/www.ozon.ru\/context\/detail\/id\/1616782\/\">\u00ab\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439\u00bb<\/a><\/p>\n<p>  <i><\/p>\n<blockquote><p>\u0426\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e, \u043e\u0441\u0432\u043e\u0438\u0432\u0448\u0438\u0441\u044c \u0441 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c, \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0432 \u0441\u0432\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u0435\u043c\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0445 \u043f\u043e\u043b\u0430\u0434\u0438\u0442\u044c \u0441 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0438 \u00ab\u0446\u0438\u0432\u0438\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u00bb \u043f\u0443\u0442\u0435\u043c. <\/p><\/blockquote>\n<p><\/i><\/p>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430\u0431\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u043e\u0432-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0434\u043b\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f CRUD \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438 DTO \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u0442\u0438\u0445 \u0441\u0430\u043c\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. <\/p>\n<p>  \u0427\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u044d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043a\u0430\u043a \u0432\u0435\u0431 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0438 \u0432\u044b\u0434\u0435\u043b\u0430\u044e\u0442 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c (\u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0435\u0433\u043e AppServer), \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0440\u043e\u0432\u043d\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u2013 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0438 \u0442.\u0434. \u0413\u043e\u0434\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043a\u0443\u0440\u0441\u0435 Pluralsight <a href=\"https:\/\/www.pluralsight.com\/courses\/building-multi-client-end-to-end-soa-angular\">Building End-toEnd Multi-Client Service Oriented Applications<\/a>. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u043c\u0430\u0440\u043a\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0430\u0437\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u0443\u0440\u0441\u0430 \u043a\u0430\u043a-\u0431\u044b \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 <abbr title=\"Service-Oriented Architecture\">SOA<\/abbr> \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u041c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043e\u043d\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0435\u0451 \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0442\u044f\u0436\u043a\u043e\u0439, \u0442.\u043a., \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043d\u0438\u0436\u043a\u0435 <a href=\"https:\/\/blogs.technet.microsoft.com\/isv_team\/2010\/09\/16\/microsoft-patterns-practices\/\">\u00ab\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e Microsoft \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439\u00bb<\/a> \u0447\u0451\u0442\u043a\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u0437\u043d\u0430\u043a SOA \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u2013 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0433\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f. \u0418\u041c\u0425\u041e \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0438\u043c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e SOA. \u0423 \u0440\u0435\u0431\u044f\u0442 \u0438\u0437 Pluralsight \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0430\u0441\u0430\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 WCF \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e. <\/div>\n<\/div>\n<p>  \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u043b\u043e\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043b\u043e\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f. <\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 DTO, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0434\u043b\u044f View UI, \u0442.\u043a. \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u043e \u0434\u0430\u043d\u043d\u044b\u0445. \u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u044d\u0442\u043e \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0443\u0440\u043e\u0432\u043d\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 (\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0430) \u0438 \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0443\u0436\u0435\u043d \u0440\u0430\u0437\u043d\u044b\u0439 UI, \u0445\u043e\u0442\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u043d\u0438 \u0441 \u043e\u0434\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435 \u043d\u0430\u0434\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. <\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f UI \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f 1 \u0432 1 \u043d\u0430 DTO, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0445 \u043d\u0430\u0434\u043e \u0433\u0434\u0435-\u0442\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c. <\/p>\n<h3>\u0410 \u0433\u0434\u0435 \u0438\u0445 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e? <\/h3>\n<p>  \u041a\u0430\u043a \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043c\u0435\u0441\u0442\u043e \u0438\u0445 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u043b\u0435\u0433\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043b\u043e\u0445\u0443\u044e \u0432 \u0433\u043b\u0430\u0437\u0430\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u043c\u0430\u0440\u043a\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\u0415\u0441\u0442\u044c \u043c\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u043b\u043e\u0445\u043e\u0439 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 <u>\u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0440\u0430\u043d\u044c\u0448\u0435<\/u>. <\/div>\n<\/div>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 UI: <\/p>\n<p>  <i>\u0422\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 (\u0431\u0440\u0430\u0443\u0437\u0435\u0440 + \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440 + \u0441\u0435\u0440\u0432\u0435\u0440 \u0411\u0414) <\/i>  <\/p>\n<ul>\n<li>\u041c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435<\/li>\n<li>\u041c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/li>\n<\/ul>\n<p>  <i>\u0427\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 (\u0431\u0440\u0430\u0443\u0437\u0435\u0440 + \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440 + \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440 + \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0411\u0414)<\/i>  <\/p>\n<ul>\n<li>\u041c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/li>\n<li>\u041c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/li>\n<\/ul>\n<p>  \u0418\u0442\u0430\u043a, \u0443 \u043d\u0430\u0441 4 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. <\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u2013 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438\u0437 \u0441\u0442\u0435\u043a\u0430 .NET \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438. <\/p>\n<p>  \u0410 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u2013 \u0432 \u0432\u0438\u0434\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u00ab\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439\u00bb \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445 (~150\u043a\u0431 \u0432 \u043d\u0435\u0441\u0436\u0430\u0442\u043e\u043c \u0432\u0438\u0434\u0435), \u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u043f\u043e\u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430 (\u0431\u043b\u0430\u0433\u043e, \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043d\u0430\u0448\u0435\u0439 \u0420\u043e\u0434\u0438\u043d\u044b \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442). <\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439<\/h3>\n<p>  \u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u2013 Chrome 48, \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0432 JSON \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e JQuery 2. <\/p>\n<p>  \u0412\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440 \u2013 IIS 6.1, \u043c\u043e\u0434\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Web API 2 (\u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 WebAPI OData v3) \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c gzip \u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u0438. JSON \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439. \u0414\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043b\u0438\u0431\u043e \u043e\u0442 \u0410\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u0432 \u0447\u0435\u0442\u044b\u0440\u0451\u0445-\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435), \u043b\u0438\u0431\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0411\u0414 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e EF 6 (\u0432 \u0442\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439). <\/p>\n<p>  \u0410\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440 \u2013 IIS 6.1, \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u0438\u0431\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e WCF Service (Net.TCP binding), \u043b\u0438\u0431\u043e c \u043f\u043e\u043c\u043e\u0449\u044c\u044e WCF DataService v3 (\u0431\u0435\u0437 \u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u0438). C \u0411\u0414 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e EF 6. <\/p>\n<p>  \u0421\u0435\u0440\u0432\u0435\u0440 \u0411\u0414 \u2014 MS SQL 2014 standart. <\/p>\n<h3>\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u043f\u043e \u0436\u0435\u043b\u0435\u0437\u0443<\/h3>\n<p>  \u0411\u0440\u0430\u0443\u0437\u0435\u0440, \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440, \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440, \u0441\u0435\u0440\u0432\u0435\u0440 \u0411\u0414 \u2013 \u0432\u0441\u0435 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445. <\/p>\n<p>  \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0436\u0435\u043b\u0435\u0437\u0430:   <\/p>\n<ul>\n<li>\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u2013 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0444\u0438\u0441\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u043d\u0430 \u0431\u0430\u0437\u0435 Core i5 <\/li>\n<li>\u0412\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440 \u2013 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043a \u043d\u0430 \u0431\u0430\u0437\u0435 Xeon E5504, 12 GB <\/li>\n<li>\u0410\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440 \u2013 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043a \u043d\u0430 \u0431\u0430\u0437\u0435 Xeon E5504, 16 GB <\/li>\n<li>\u0421\u0435\u0440\u0432\u0435\u0440 \u0411\u0414 \u2013 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0431\u0430\u0437\u0435 Xeon E5-2620, 32 GB, Raid 10 SAS<\/li>\n<\/ul>\n<p>  \u0412\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440, \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440, \u0441\u0435\u0440\u0432\u0435\u0440 \u0411\u0414 \u2013 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u0438, \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u043e \u0432 \u041c\u043e\u0441\u043a\u0432\u0435. \u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b 10\u0422\u0411 \u0441\u0435\u0442\u044c\u044e. \u0412\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440 \u0442\u043e\u0440\u0447\u0438\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u044b \u0437\u0430 Microsoft Forefront TMG. <\/p>\n<p>  \u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u2013 \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u043e \u0432 \u041c\u043e\u0441\u043a\u0432\u0435 \u0438 \u0423\u0444\u0435 (\u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430). \u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0441 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u00ab\u0445\u043e\u0440\u043e\u0448\u0438\u043c\u0438\u00bb \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 WIFI. <\/p>\n<h3>\u0414\u0430\u043d\u043d\u044b\u0435<\/h3>\n<p>  \u0412 \u0411\u0414 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430 (Guid, Name) \u0441 10 \u0442\u044b\u0441. \u0441\u0442\u0440\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<p>  \u0414\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e EF \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0442\u0440\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e 1000 \u0441\u0442\u0440\u043e\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (Skip, Take). \u041f\u0435\u0440\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u0434\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438. \u0421\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a \u0442\u0440\u0451\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0440\u0430\u0432\u0435\u043d 2000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u043b\u0438 ~150 \u043a\u0431. <\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u043e\u043f\u0435\u0440\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u2013 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e. <\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438 \u0411\u0414 \u0438 EF \u0443 \u043d\u0430\u0441 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u043d\u043e \u0432\u043d\u043e\u0441\u044f\u0442 \u0441\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e-\u043c\u0438\u043d\u0438\u043c\u043e\u043c\u0443 (\u0442.\u043a. \u043c\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0435 EF \u0438 \u043d\u0435 \u0411\u0414, \u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0432 \u0446\u0435\u043b\u043e\u043c), \u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439. <\/p>\n<h3>\u0427\u0442\u043e \u0438 \u043a\u0430\u043a \u043c\u0435\u0440\u044f\u0435\u043c<\/h3>\n<p>  \u0417\u0430\u043c\u0435\u0440\u044f\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043c\u0435\u0436\u0434\u0443 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 javascript. \u0420\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f. <\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 1\u0441 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0432\u0441\u0451 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0437\u0430\u043d\u043e\u0432\u043e. <\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u0435\u043b\u0430\u0435\u043c ~500 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0438 \u0441\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e\u043c \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. <\/p>\n<p>  \u0411\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0434\u0432\u0435 \u0441\u0435\u0440\u0438\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u043e \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 (\u041c\u043e\u0441\u043a\u0432\u0430 \u0438 \u0423\u0444\u0430)<br \/>  \u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u043d\u0430\u043b\u044b \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0448\u0442\u0430\u0442\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b. <\/p>\n<h3>\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0441\u0442\u0435\u043d\u0434\u044b<\/h3>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0441\u0442\u0435\u043d\u0434\u044b <\/p>\n<ul>\n<li>\u0427\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0447\u0435\u0440\u0435\u0437 WCF DataService, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Web API <\/li>\n<li>\u0427\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0447\u0435\u0440\u0435\u0437 WCF \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e net.tcp \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Web API<\/li>\n<li>\u0427\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0447\u0435\u0440\u0435\u0437 WCF \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e net.tcp \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Web API<\/li>\n<li>\u0422\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Web API <\/li>\n<li>\u0422\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 Web API Odata<\/li>\n<\/ul>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0438\u0434\u0451\u043c \u043e\u0442 \u0441\u0430\u043c\u043e\u0439 \u0442\u043e\u0440\u043c\u043e\u0437\u043d\u043e\u0439 \u043a \u0441\u0430\u043c\u043e\u0439 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 <\/p>\n<h3>\u0427\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0447\u0435\u0440\u0435\u0437 WCF DataService, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Web API<\/h3>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e1e\/665\/d06\/e1e665d066c1423ab07601b2a39b5ed8.JPG\" \/><\/div>\n<p>  <\/p>\n<h6>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/h6>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f WCF DataService (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0440\u0445 \u043c\u043e\u0434\u0435\u043b\u0438 EF) \u2013 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0432 \u044d\u0442\u043e\u043c \u0441\u0430\u043c\u043e\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0435. \u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 URL, \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f LINQ <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">public class DocumentListController : ApiController  {    \/\/ GET: api\/DocumentList\/    public async Task&lt;DocumentListViewModel&gt; Get()    {     var result = new DocumentListViewModel();     var appServer = new DocumentsServiceHelper();      result.AllDocuments = await Task.Run(() =&gt; appServer.GetAllDocuments());      var data = await Task.WhenAll(       Task.Run(() =&gt; appServer.GetEvenDocuments()),        Task.Run(() =&gt; appServer.GetOddDocuments()));      result.EvenDocuments = data[0];     result.OddDocuments = data[1];      return result;    }  }    public class DocumentsServiceHelper  {    private const string DocumentsServiceUrl = @&quot;http:\/\/xxx\/appdataserver\/documentsservice.svc\/&quot;;     public DocumentItem[] GetAllDocuments()    {     var context = new Documents(new Uri(DocumentsServiceUrl));     var rnd = new Random();     return context.DocumentItems.OrderBy(x =&gt; x.Id).Skip(rnd.Next(0, 9000)).Take(1000).ToArray();    }     public DocumentItem[] GetEvenDocuments()    {     var context = new Documents(new Uri(DocumentsServiceUrl));     var rnd = new Random();     return context.DocumentItems.OrderBy(x =&gt; x.Id).Skip(rnd.Next(0, 9000)).Take(1000).ToList().Where((x, i) =&gt; i % 2 != 0).ToArray();    }     public DocumentItem[] GetOddDocuments()    {     var context = new Documents(new Uri(DocumentsServiceUrl));     var rnd = new Random();     return context.DocumentItems.OrderBy(x =&gt; x.Id).Skip(rnd.Next(0, 9000)).Take(1000).ToList().Where((x, i) =&gt; i % 2 == 0).ToArray();    }   }  } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0441\u0435\u0440\u0432\u0438\u0441\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]   public class DocumentsService : EntityFrameworkDataService&lt;Documents&gt;   {    public static void InitializeService(DataServiceConfiguration config)    {     config.SetEntitySetAccessRule(&quot;*&quot;, EntitySetRights.AllRead);     config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;    }   }  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h6>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h6>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/1c3\/219\/78a\/1c321978a13d476c81f6bc6f66bf1b69.JPG\" \/><\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b 850-1100 \u043c\u0441, \u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 5% \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 1.1\u0441. \u042d\u0442\u043e \u0434\u043b\u044f \u041c\u043e\u0441\u043a\u0432\u044b. \u0414\u043b\u044f \u0423\u0444\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0445\u0443\u0436\u0435.<\/p>\n<h6>\u0412\u044b\u0432\u043e\u0434<\/h6>\n<p>  WCF Data Services \u2014 \u043d\u0435 \u043d\u0430\u0448 \u0432\u0430\u0440\u0438\u0430\u043d\u0442<\/p>\n<h3>\u0422\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 Web API Odata<\/h3>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c17\/7ed\/564\/c177ed56439f4f4e8ecdd3dab223302a.JPG\" \/><\/div>\n<p>  <\/p>\n<h6>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/h6>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Web API OData (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0440\u0445 \u043c\u043e\u0434\u0435\u043b\u0438 EF) \u2013 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0432 Web API \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435. \u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 URL.<br \/>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u2013 \u043d\u0430 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440 \u0435\u0434\u0435\u0442 \u0442\u0440\u0438 Web API \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u0433\u0434\u0435 \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043e\u0434\u043d\u0430 \u0448\u0442\u0443\u043a\u0430.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 (\u043d\u0430 Type Script)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">class DocumentItem {     Id: string;     Name: string;     constructor(_id: string, _name: string) {         this.Id = _id;         this.Name = _name;     } }  class DocumentsController {     DocumentItems: DocumentItem[];     OddDocumentItems: DocumentItem[];     EvenDocumentItems: DocumentItem[];     constructor() {         this.DocumentItems = [];         this.EvenDocumentItems = [];         this.OddDocumentItems = [];     }      public FillData(): Promise&lt;any&gt; {         var p = new Promise&lt;any&gt;((resolve, reject) =&gt; {             var queryOne = this.ExecuteQuery(this.GetQuery())                 .then((data: DocumentItem[]) =&gt; {                     this.DocumentItems = data;                      var queryTwo = this.ExecuteQuery(this.GetQuery());                     var queryThree = this.ExecuteQuery(this.GetQuery());                      var result = Promise.all([queryTwo, queryThree]);                     result                         .then((data: DocumentItem[][]) =&gt; {                             this.EvenDocumentItems = data[0].filter((x, i, all) =&gt; i % 2 != 0);                             this.OddDocumentItems = data[1].filter((x, i, all) =&gt; i % 2 == 0);                             resolve();                         }, reject);                 }, reject);         });         return p;             }      private GetQuery(): string {         var random = Math.floor(Math.random() * 9000);         return &quot;$orderby=Id desc&$skip=&quot; + random + &quot;&$top=1000&quot;;     }      private ExecuteQuery(query: string): Promise&lt;DocumentItem[]&gt; {         var uri = &quot;odata\/Documents?&quot;;                  var p = new Promise((resolve, reject) =&gt; {             $.getJSON(uri + query)                 .done((data: any) =&gt; {                     var realData = $.map&lt;any, DocumentItem&gt;(data.value, (x: any, i: number) =&gt; new DocumentItem(x.Id, x.Name));                     resolve(realData);                 })                 .fail((jqXHR: JQueryXHR, textStatus: string, err: string) =&gt; reject(err));         });          return p;     }         } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u2013 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 (Web API 2 OData v3 Controller with actions using Entity Framework), \u043d\u0435 \u0431\u0443\u0434\u0443 \u0435\u0433\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c.<\/p>\n<h6>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h6>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f10\/29a\/736\/f1029a7365f4487a9a50ebbfa981d1ab.JPG\" \/><\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b 200-350 \u043c\u0441 \u0434\u043b\u044f \u041c\u043e\u0441\u043a\u0432\u044b \u0438 250-400\u043c\u0441 \u0434\u043b\u044f \u0423\u0444\u044b, \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u043f\u043b\u043e\u0445\u043e. \u041d\u041e, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0431\u043e\u043b\u044c\u0448\u0435 800\u043c\u0441 (\u0434\u043b\u044f \u0423\u0444\u044b \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 5%). \u0414\u043b\u044f \u044e\u0437\u0435\u0440\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c, \u0447\u0442\u043e UI \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u0441\u0442\u0440\u043e, \u041d\u041e \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0442\u044c. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u0435\u0442.<\/p>\n<h6>\u0412\u044b\u0432\u043e\u0434<\/h6>\n<p>  \u0422\u0430\u043a\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u044b\u043d\u0447\u0435 \u043c\u043e\u0434\u043d\u043e\u0439. \u0418 \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0441\u0438\u043b\u044c\u043d\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442. \u041d\u043e \u0418\u041c\u0425\u041e \u043e\u043d\u0430 \u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0438\u043d\u0442\u0440\u0430\u043d\u0435\u0442\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043c\u043e\u0449\u043d\u044b\u0445 \u043e\u0444\u0438\u0441\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f UI \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0412\u0435\u0440\u0441\u0438\u044f, \u0442\u0438\u043f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u2013 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u041f\u043e\u0434 IE \u0432\u0441\u0451 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u043d\u0435\u0435, \u044f \u0443\u0436 \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044e \u043f\u0440\u043e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b. <\/p>\n<h3>\u0427\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0447\u0435\u0440\u0435\u0437 WCF \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e net.tcp \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Web API<\/h3>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e19\/6cd\/ef5\/e196cdef5eb74637864af232c89f577f.JPG\" \/><\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 Web API \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/ GET: api\/DocumentList\/ \t\tpublic async Task&lt;DocumentListViewModel&gt; Get() \t\t{ \t\t\tvar result = new DocumentListViewModel();  \t\t\tvar appServer = new DocumentsService.DocumentsServiceClient(); \t\t\tappServer.Open();  \t\t\tresult.AllDocuments = await appServer.GetAllDocumentsAsync(); \t\t\tvar even = appServer.GetEvenDocumentsAsync(); \t\t\tvar odd = appServer.GetOddDocumentsAsync();  \t\t\tvar data = await Task.WhenAll(even, odd);  \t\t\tresult.EvenDocuments = data[0]; \t\t\tresult.OddDocuments = data[1]; \t\t\tappServer.Close();  \t\t\treturn result; \t\t} <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0441\u0435\u0440\u0432\u0438\u0441\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">public class DocumentsService : IDocumentsService \t{ \t\t \t\tpublic DocumentItem[] GetAllDocuments() \t\t{ \t\t\tvar rnd = new Random();  \t\t\tusing (var context = new Documents()) \t\t\t{ \t\t\t\treturn context.DocumentItems.OrderBy(x =&gt; x.Id).Skip(rnd.Next(0, 9000)).Take(1000).ToArray(); \t\t\t} \t\t} \t\t  \t\tpublic DocumentItem[] GetEvenDocuments() \t\t{ \t\t\tvar rnd = new Random();  \t\t\tusing (var context = new Documents()) \t\t\t{ \t\t\t\treturn context.DocumentItems.OrderBy(x =&gt; x.Id).Skip(rnd.Next(0, 9000)).Take(1000).ToList().Where((x, i) =&gt; i % 2 != 0).ToArray(); \t\t\t} \t\t}  \t\tpublic DocumentItem[] GetOddDocuments() \t\t{ \t\t\tvar rnd = new Random();  \t\t\tusing (var context = new Documents()) \t\t\t{ \t\t\t\treturn context.DocumentItems.OrderBy(x =&gt; x.Id).Skip(rnd.Next(0, 9000)).Take(1000).ToList().Where((x, i) =&gt; i % 2 == 0).ToArray(); \t\t\t} \t\t} \t}  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h6>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h6>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b08\/454\/ab5\/b08454ab5be64e16b255133161c34e91.JPG\" \/><\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b 100-200 \u043c\u0441 \u0434\u043b\u044f \u041c\u043e\u0441\u043a\u0432\u044b \u0438 150-250\u043c\u0441 \u0434\u043b\u044f \u0423\u0444\u044b. \u0418, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043b\u044f \u041c\u043e\u0441\u043a\u0432\u044b \u043d\u0435\u0442, \u0434\u043b\u044f \u0423\u0444\u044b \u2013 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0442.<\/p>\n<h6>\u0412\u044b\u0432\u043e\u0434<\/h6>\n<p>  \u0421 \u0442.\u0437. \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0433\u043e\u0434\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430.<\/p>\n<h3>\u0427\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0447\u0435\u0440\u0435\u0437 WCF \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e net.tcp \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Web AP<\/h3>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/492\/6d4\/afe\/4926d4afe24e47129e3a1cac1a107ee0.JPG\" \/><\/div>\n<p>  <\/p>\n<h6>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/h6>\n<p>  \u041c\u043d\u043e\u0433\u0438\u0435 \u0441\u043a\u0430\u0436\u0443\u0442, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f UI \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u2013 \u043c\u043e\u0432\u0435\u0442\u043e\u043d. \u0422\u0430\u043a \u043e\u043d\u043e, \u043f\u043e \u0441\u0443\u0442\u0438 \u0438 \u0435\u0441\u0442\u044c. <br \/>  \u0427\u0442\u043e\u0431\u044b \u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0444\u0430\u0441\u0430\u0434 DD \u043c\u043e\u0434\u0435\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u043f\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0443 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f UI, \u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0430 \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0441\u0430\u0434 DD \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f UI. \u0412\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441. \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 UI \u2013 \u043d\u0430 \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441. <br \/>  \u0412 \u044d\u0442\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440 \u0448\u043b\u0451\u0442 1 WCF \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0440\u0451\u0445 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">public class UIService : IUIService \t{ \t\tpublic async Task&lt;DocumentListViewModel&gt; GetModel() \t\t{ \t\t\tvar result = new DocumentListViewModel();  \t\t\t                        var docService = new DocumentsService();  \t\t\tresult.AllDocuments = await Task.Run(() =&gt; docService.GetAllDocuments()); \t\t\tvar even = Task.Run(() =&gt; docService.GetEvenDocuments()); \t\t\tvar odd = Task.Run(() =&gt; docService.GetOddDocuments());  \t\t\tvar evenOdd = await Task.WhenAll(even, odd);  \t\t\tresult.EvenDocuments = evenOdd[0]; \t\t\tresult.OddDocuments = evenOdd[1]; \t\t\t                         return result; \t\t} \t} } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 Web API \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/ GET: api\/DocumentList\/ \t\tpublic DocumentListViewModel Get() \t\t{ \t\t\tvar appServer = new UIServiceClient(); \t\t\tappServer.Open();  \t\t\tvar data = appServer.GetModel(); \t\t\tappServer.Close(); \t\t\t                         return data; \t\t} <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h6>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h6>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/7ba\/82b\/241\/7ba82b24179641ad863c295d94d5b12e.JPG\" \/><\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b 100-150 \u043c\u0441 \u0434\u043b\u044f \u041c\u043e\u0441\u043a\u0432\u044b \u0438 150-250\u043c\u0441 \u0434\u043b\u044f \u0423\u0444\u044b.<\/p>\n<h6>\u0412\u044b\u0432\u043e\u0434<\/h6>\n<p>  C\u0430\u043c\u0430\u044f \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430. \u0418 \u0441\u0430\u043c\u0430\u044f \u043d\u0430\u0434\u0451\u0436\u043d\u0430\u044f, \u0442.\u043a. \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043c\u0435\u043d \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438 \u0430\u043f\u043f\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043a\u0430\u043a \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a \u0438 \u043f\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0432\u044b\u0437\u043e\u0432\u0430.<\/p>\n<h3>\u0422\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Web API<\/h3>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/261\/557\/99b\/26155799b7b14e6bbe7075d07e5faf69.JPG\" \/><\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">public class DocumentListController : ApiController     {         \/\/ GET: api\/DocumentList\/         public async Task&lt;DocumentListViewModel&gt; Get()         { \t\t\tvar result = new DocumentListViewModel();  \t\t\tvar watch = new Stopwatch(); \t\t\t \t\t\twatch.Start(); \t\t\tvar docService = new DocumentsService();  \t\t\tresult.AllDocuments = await Task.Run(() =&gt; docService.GetAllDocuments()); \t\t\tvar even = Task.Run(() =&gt; docService.GetEvenDocuments()); \t\t\tvar odd = Task.Run(() =&gt; docService.GetOddDocuments());  \t\t\tvar evenOdd = await Task.WhenAll(even, odd);  \t\t\tresult.EvenDocuments = evenOdd[0]; \t\t\tresult.OddDocuments = evenOdd[1];  \t\t\twatch.Stop(); \t\t\tresult.Log = watch.ElapsedMilliseconds.ToString(); \t\t\treturn result;         }      } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f (\u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 EF)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">public class DocumentsService \t{  \t\tpublic DocumentItem[] GetAllDocuments() \t\t{ \t\t\tvar rnd = new Random();  \t\t\tusing (var context = new Documents()) \t\t\t{ \t\t\t\treturn context.DocumentItems.OrderBy(x =&gt; x.Id).Skip(rnd.Next(0, 9000)).Take(1000).ToArray(); \t\t\t} \t\t}   \t\tpublic DocumentItem[] GetEvenDocuments() \t\t{ \t\t\tvar rnd = new Random();  \t\t\tusing (var context = new Documents()) \t\t\t{ \t\t\t\treturn context.DocumentItems.OrderBy(x =&gt; x.Id).Skip(rnd.Next(0, 9000)).Take(1000).ToList().Where((x, i) =&gt; i % 2 != 0).ToArray(); \t\t\t} \t\t}  \t\tpublic DocumentItem[] GetOddDocuments() \t\t{ \t\t\tvar rnd = new Random();  \t\t\tusing (var context = new Documents()) \t\t\t{ \t\t\t\treturn context.DocumentItems.OrderBy(x =&gt; x.Id).Skip(rnd.Next(0, 9000)).Take(1000).ToList().Where((x, i) =&gt; i % 2 == 0).ToArray(); \t\t\t} \t\t} \t} <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h6>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h6>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/4bf\/b13\/06a\/4bfb1306a3534dafac92e4e48dc29599.JPG\"\/><br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b 100-150 \u043c\u0441 \u0434\u043b\u044f \u041c\u043e\u0441\u043a\u0432\u044b \u0438 100-200\u043c\u0441 \u0434\u043b\u044f \u0423\u0444\u044b. <\/p>\n<h6>\u0412\u044b\u0432\u043e\u0434<\/h6>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u0442\u043e \u044d\u0442\u043e \u2013 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<h3>\u0422\u0430\u043a\u0438\u0435 \u0434\u0435\u043b\u0430.<\/h3>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/279331\/\"> https:\/\/habrahabr.ru\/post\/279331\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/305\/60f\/b36\/30560fb360d44db3a880901bdf4733ef.jpg\" \/><\/div>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u0442\u0440\u0451\u0445-\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445-\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 .NET (Web API, Web API OData, WCF net.tcp, WCF Data Services). <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-276237","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/276237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=276237"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/276237\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=276237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=276237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=276237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}