Используйте WGet вместо этого. Это поддерживает протоколы FTP и HTTP.
wget -r ftp://mydomain.com/mystuff
Удачи!
ссылка: http://linux.about.com/od/commands/l/blcmdl1_wget.htm
В идеале закройте канал, как только вы закончите с ним. Это поместит его обратно в пул каналов, чтобы он мог использоваться другим рабочим потоком.
Да, фабрика каналов (дорогостоящий бит) может оставаться в течение всего времени существования приложения.
По состоянию на .Net 4.5 есть встроенные опции кеширования для фабрик ChannelFactory Caching .NET 4.5
Это отступление. Почему вы используете SessionID в качестве контекстного ключа? Context.Items уникален для каждого запроса. То есть:
HttpContext.Current.Items[HttpContext.Current.Session.SessionID +"_ListOfOpenedChannels"]
должен быть функционально эквивалентен:
HttpContext.Current.Items["ListOfOpenedChannels"]