рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд▓реНрдж рд╣реА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рджреЗрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдСрдЯреЛ-рдЕрдкрдбреЗрдЯ рд╕реЗрд╡рд╛ рд▓рд┐рдЦрдХрд░ рдЬреЛ рд╕рднреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд▓рдЯрдХрд╛рдПрдЧреА рдФрд░ рд╕рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдЧреАред
.NET рдХреЗ рд▓рд┐рдП рдХрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ ClickOnceред рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдЕрдм рдирдпрд╛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рди рддреЛ рдЧрдВрднреАрд░ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ, рдФрд░ рди рд╣реА рд╕рдВрдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ ClickOnce рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдмрд╛рд░реАрдХреА рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреА рдкрд╕рдВрдж рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, ClickOnce рдПрдХ рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рдЕрдм рдореИрдВ рдСрдЯреЛ-рдЕрдкрдбреЗрдЯ рддрдВрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рджреГрд╖реНрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдЕрдВрддрд┐рдо рд╕рддреНрдп рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдЭрд╛рд╡реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдпреВрдкреАрдбреА: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рд╛рд░ рдЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЙрдиреНрдирдпрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВ, рддреЛ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рд╕реЗ "рдкреНрд░рд╛рдкреНрдд" рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪрд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЕрдкрдбреЗрдЯ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдиреЗрдХреНрд╢рди рд░рдЦреЗрдВред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдПрдХрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рднреА рдЕрджреНрдпрддрдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреА рд╣реИ, рдФрд░ рд╕рдВрднрд╡рддрдГ ClickOnce рдЬрд▓реНрдж рд╣реА рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрди рдЬрд╛рдПрдЧреА рдпрджрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреА рдЦреБрдж рдХреА "рдмрд╛рдЗрдХ" рдмрдирд╛рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдВред рдФрд░ рдЬрдм рд╡реЗ рдкрд░реНрдпрд╛рдкреНрдд ClickOnce рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреА рдмрд╛рдЗрдХ рдмрдирд╛рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдВрдЧреЗред рдЕрдм, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдп
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИрдВред рдореИрдВ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдСрдЯреЛ-рдЕрдкрдбреЗрдЯ рд╕реЗрд╡рд╛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рдореИрдВ рдЗрд╕реЗ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреВрдВред рдФрд░ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред рдпрд╣ рднреА рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдореБрдЭреЗ рдСрдЯреЛ-рдЕрдкрдбреЗрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрджреНрдпрддрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдХрд┐рд╕реА рддрд░рд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рдУрдПрд╕ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рд▓ рдХрд░реВрдВрдЧрд╛, рд╕реА # .NET рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦреВрдВрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрдореВрд░реНрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ рдФрд░ рдХреЛрдб рдХреЗ рдХреЗрд╡рд▓ рдЫреЛрдЯреЗ рдЕрдВрд╢ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред
рдореЗрд░реА рдСрдЯреЛ-рдЕрдкрдбреЗрдЯ рд╕реЗрд╡рд╛ рдореЗрдВ 3 рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ:
1) рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛, рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг, рд╕рднреА рд╕рдорд░реНрдерд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЬреЛ рдпрд╣рд╛рдВ рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ "рджреВрд░рд╕реНрде" рд╕реЗрдЯрд┐рдВрдЧреНрд╕)ред
2) рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдЬреЛ рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдЧреА рдФрд░ рд╕рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдкрдбреЗрдЯ рдЯрд╛рдЗрдорд░ рдФрд░ рдСрди рдбрд┐рдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХрд░реЗрдЧреАред
3) рдХреНрд▓рд╛рдЗрдВрдЯ-рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ-рд╕рд░реНрд╡рд┐рд╕ рдЕрдкрдбреЗрдЯреЗрдЯрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдиреЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред
рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рднреА 3 рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдореЗрдВ рд░рдЦрд╛ рдФрд░ рдЙрдирдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╛рдо рджрд┐рдпрд╛ред
Updater.Online - рд╡реЗрдм рд╕реЗрд╡рд╛
Updater.Service - рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕реЗрд╡рд╛
Updater.Client - рдХреНрд▓рд╛рдЗрдВрдЯ рдореЙрдбреНрдпреВрд▓
рдореИрдВрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдЕрдореВрд░реНрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рднреА рдЪреБрдиреА -
рдЕрдкрдбреЗрдЯрд░.рдбреЛрдореИрди ред
рдЕрдкрдбреЗрдЯрд░ рдСрдирд▓рд╛рдЗрди
рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рд╕рдм рдХреБрдЫ рдПрдХ CheckForUpdates рдкрджреНрдзрддрд┐ рдореЗрдВ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ ApplicationID рдФрд░ CurrentVersion рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдЕрдкрдбреЗрдЯ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡рд╣рд╛рдБ рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдбреЗрдЯ рдпрд╛ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде .z рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрде рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдЕрджреНрдпрддрди рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓рд╛ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдзрд┐рдХ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реЗрд╡рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд▓реМрдЯрд╛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдЕрджреНрдпрддрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдХрд╛рдо рдЖ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реЗрд╡рд╛ рдкрд░ рдЖрдк рдпрд╣ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрд▓реЗрдВрдЯ-рдореЛрдб рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЕрдкрдбреЗрдЯ рдХреИрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдпрд╣ рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ, рдЖрджрд┐ред
рдЕрдкрдбреЗрдЯрд░ рд╕реЗрд╡рд╛
рдпрд╣ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЬреНрд╡рд╛рд▓рд╛рдореБрдЦреА рдореЙрдбреНрдпреВрд▓ рд╣реИред рдпрд╣рд╛рдВ рдбрдмреНрд▓реНрдпреВрд╕реАрдПрдл рд╕реЗрд╡рд╛ рдЕрдкрдбреЗрдЯрд░ рд╕рд░реНрд╡рд┐рд╕ рд╣реИ, рдиреАрдЪреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред
[ServiceContract(CallbackContract = typeof(IUpdateServiceCallback))] public interface IUpdaterService { #region Callback subsctibe/unsibscribe methods [OperationContract(IsOneWay = true)] void Subscribe(SubscribeRequest request); [OperationContract(IsOneWay = true)] void Unsubscribe(UnsubscribeRequest request); #endregion [OperationContract(IsOneWay = true)] void InstallAvalibleUpdates(InstallAvalibleUpdatesRequst request); [OperationContract(IsOneWay = true)] void DownloadUpdate(Guid applicationId); [OperationContract(IsOneWay = true)] void CheckForUpdates(Guid applicationId); } [ServiceContract] public interface IUpdateServiceCallback { [OperationContract(IsOneWay = true)] void OnUpdateDetected(UpdateDetectedEventArgs eventArgs); [OperationContract(IsOneWay = true)] void OnUpdateDownloaded(UpdateDownloadedEventArgs updateDetectedEventArgs); [OperationContract(IsOneWay = true)] void OnUpdateInstalled(UpdateInstalledEventArgs eventArgs); }
рд╕рджрд╕реНрдпрддрд╛ рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ, рдореИрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕реНрдерд┐рд░ рд╢рдмреНрджрдХреЛрд╢ <TAppID, CallbackList> рдореЗрдВ рдЖрдпрд╛ рдПрдХ рдХреЙрд▓рдмреИрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ TAPID рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ (рдореЗрд░реЗ рдкрд╛рд╕ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рд╣реИ), рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреА рдПрдХ рдЕрд▓рдЧ рд╕реВрдЪреА рд╣реИред
рдпрд╣рд╛рдВ рд╕рджрд╕реНрдпрддрд╛ рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ
public void Subscribe(SubscribeRequest request) {
рд╕рд╛рде рд╣реА рдЕрдкрдбреЗрдЯрд░ рд╕рд░реНрд╡рд┐рд╕ рдореЗрдВ, рдореИрдВрдиреЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдердбреНрд╕ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдирдХреЗ рдХреЙрд▓ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдереЛрдбрд╝рд╛ рдЫреБрдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯрд░ рд╕реЗрд╡рд╛ рдХреА рддрд░рдл рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдкрд░ рдЙрдЪрд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред
private static Dictionary<Guid, CallbacksList> registredCallbacks;
рд╕реЗрд╡рд╛ рдкрд░ рднреА, рдореИрдВ рдПрдХ "рдЯрд╛рдЗрдорд░" рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрд╡рдзрд┐ рдХреЗ рдмрд╛рдж рд╕рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред
ApplicationService рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╣рд╛ рд╣реИ, рдпрд╣ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рднрдВрдбрд╛рд░ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд╛рд╕реЗрд╕ рдФрд░ рдЕрдкрдбреЗрдЯ рд╣реИрдВред
public class Application { public Guid Id { get; set; } public String Name { get; set; } public Version CurrentVersion { get; set; } public String RootFolderPath { get; set; } public List<Update> Updates { get; set; } } public class Update { public String UpdateUrl { get; set; } public Version Version { get; set; } public bool IsInstalled { get; set; } public bool IsDownloaded { get; set; } public string UpdateLocalPath { get; set; } }
рдЕрдкрдбреЗрдЯрд░ рдХреНрд▓рд╛рдЗрдВрдЯ
рдпрд╣ рдЕрд╕реЗрдВрдмрд▓реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреА рд╣реИ рдФрд░ рдЕрдкрдбреЗрдЯрд░ рд╕реЗрд╡рд╛ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ IUpdateServiceCallback рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреА рд╣реИред рдЖрдк рдЙрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЕрдкрдбреЗрдЯрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓рдкреЗрдЯрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ, рдФрд░ рд╕рдм рдХреБрдЫ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рди рд╣рд┐рд▓рд╛рдПрдВ рдЬреЛ рдЕрдкрдбреЗрдЯрд░ рд╕реЗрд╡рд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ IUpdatable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
public interface IUpdatble { Guid ApplicationId { get; } String ApplicationName { get; } String RootFolder { get; } } public class UpdaterClient { private IUpdaterService client; private IUpdateble settings; private DuplexChannelFactory<IUpdaterService> factory; public UpdaterClient(IUpdateServiceCallback callback, IUpdateble settings) { this.settings = settings; var context = new InstanceContext(callback); var binding = new NetTcpBinding();
рдЦреИрд░, рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдо рдЕрдкрдбреЗрдЯрд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЕрдкрдбреЗрдЯрд░рдХреНрд▓рд╛рдЗрдВрдЯ, рд╕рджрд╕реНрдпрддрд╛ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдФрд░ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирдП рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЗрд╡рд╛ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред