рдиреИрдиреНрд╕реА рдПрдХ рд╕рд╛рде рдХрдИ (<10) рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред
рдпрд╣ рдЧреИрд░-рд╕рд░реНрд╡рд░ рд╡рд┐рдВрдбреЛрдЬрд╝ рдУрдПрд╕ рдкрд░ рдкреВрд░реНрдг рдЖрдИрдЖрдИрдПрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдо рд╕рдорд╕реНрдпрд╛ рдХреА рдЪреАрдЦ рд╣реИ, рдЖрдк рд╡рд┐рдВрдбреЛрдЬрд╝/рдЖрдИрдЖрдИрдПрд╕ рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ (рдпрджрд┐ рдмрд┐рд▓реНрдХреБрд▓ рднреА)?
рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛: рдореИрдВ Microsoft.Owin.Host.HttpListener рдХреЗ рд╕рд╛рде рд╕реЗрд▓реНрдлрд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рд╢рд╛рдпрдж рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ?
рдУрдПрд╕ рд╡рд┐рдВрдбреЛрдЬ 10 рд╣реИред
рд╕реЗрд▓реНрдлрд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп http рд╕рд░реНрд╡рд░) рдХреЗ рд▓рд┐рдП nginx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдкред
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ @ рдХрд┐рд░реА-рд░рд┐рди nginx рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИ рдФрд░ рдлрд┐рд░ рдиреИрдиреНрд╕реА рдХреЛ рдПрдкреАрдЖрдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рд╛рдорд╛рди рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рджреЗрдВред
рдЦреИрд░, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЧреИрд░-рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рднреА рд╣реИ рдЬреЛ рдмрдбрд╝реА рд╣реИ рдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓реЗрддреА рд╣реИред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдЖрдЧреЗ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛ред рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
@ рдХреЛрдбреА 82 рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рд░реНрдЧ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ
рд╣рд╛рдВред рддреЛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдиреИрдиреНрд╕реА рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп HTTP рдЕрдиреБрд░реЛрдз рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╣реИ рдЬреЛ рдареАрдХ рд╕реЗ async рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ?
рдореИрдВрдиреЗ рд╕рд░реНрд╡рд┐рд╕рд╕реНрдЯреИрдХ рдореЗрдВ рднреА рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕реЙрдХреЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ рдЬреЛ рд╕рдм рдХреБрдЫ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ GenericFileResponse.GetFileContent рдкрд░ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рд╣реИ:
c#
private static Action<Stream> GetFileContent(string filePath, long length)
{
return stream =>
{
using (var file = File.OpenRead(filePath))
{
file.CopyTo(stream, (int)(length < BufferSize ? length : BufferSize));
}
};
}
рддреЛ File.CopyTo рдлрд╛рдЗрд▓/рд╡реАрдбрд┐рдпреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╣реЛрдиреЗ рдХреЗ рджреМрд░рд╛рди рдереНрд░реЗрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИред
(рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рд╡рд░реНрдЧ рдЖрдВрд╢рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рд╣реИред)
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдПрд╕рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ?
(рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рд╡рд░реНрдЧ рдЖрдВрд╢рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рд╣реИред)
@ рдХреЛрдбреА82 рдореИрдВрдиреЗ рд╡реАрдбрд┐рдпреЛ/рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд░реНрдЯрд┐рдпрд▓рдлрд╛рдЗрд▓ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдмрдирд╛рдпрд╛: https://gist.github.com/danbarua/0fd9fcad5ec85e0c02dc
рдереЛрдбрд╝реА рд╕рдлрд╛рдИ рдХреА рдЬрд░реВрд░рдд рд╣реИ рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рдиреИрдиреНрд╕реА рдореЗрдВ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЬреЗрдиреЗрд░рд┐рдХрдлрд╛рдЗрд▓ рд░реЗрд╕реНрдкреЙрдиреНрд╕ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп http рд╕рд░реНрд╡рд░) рдХреЗ рд▓рд┐рдП nginx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдкред