Получаю зацикленность кода

280
21 октября 2017, 15:32

Всем добрый день. Разбирал пример шаблонного метода на основе делегатов, который используется при работе с WCF сервисами. Исходный код следующий:

    // Интерфейс сервиса анализа паттернов проектирования
interface IPatternAnalyzer
{
    DesignPatterns AnalyzePatterns(string url);
}
// Прокси класс, инкапсулирующий в себе особенности работы
// с WCF инфраструктурой
class PatternAnalyzerProxy : IPatternAnalyzer
{
    class PatternAnalyzerClient : ClientBase<IPatternAnalyzer>
    {
        public IPatternAnalyzer ChannelAnalyzer
        {
            get { return Channel; }
        }
    }
    public DesignPatterns AnalyzePatterns(string url)
    {
        return UseProxyClient(pa => pa.AnalyzePatterns(url));
    }
    private T UseProxyClient<T>(Func<IPatternAnalyzer, T> accessor)
    {
        var client = new PatternAnalyzerClient();
        try
        {
            var result = accessor(client.ChannelAnalyzer);
            client.Close();
            return result;
        }
        catch (CommunicationException e)
        {
            client.Abort();
            throw new OperationFailedException(e);
        }
    }
}

В процессе разбора, поскольку у меня нет практики использования WCF я упростил код и получил:

namespace patterns.TemplateMethod
{
    class WCF_Template_Method
    {
        public static void Main()
        {
            PatternAnalyzerProxy _p = new PatternAnalyzerProxy();
            _p.AnalyzePatterns("www.yandex.ru");
        }
    }
    class DesignPatterns
    {
    }
    // Интерфейс сервиса анализа паттернов проектирования
    interface IPatternAnalyzer
    {
        DesignPatterns AnalyzePatterns(string url);
    }
    // Прокси класс, инкапсулирующий в себе особенности работы
    // с WCF инфраструктурой
    class PatternAnalyzerProxy : IPatternAnalyzer
    {
        class PatternAnalyzerClient: IPatternAnalyzer
        {
            public IPatternAnalyzer ChannelAnalyzer
            {
                get { return new PatternAnalyzerProxy(); }
            }
            public DesignPatterns AnalyzePatterns(string url)
            {
                throw new NotImplementedException();
            }
        }  
        public DesignPatterns AnalyzePatterns(string url)
        {
            return UseProxyClient(pa => pa.AnalyzePatterns(url));
        }
        private T UseProxyClient<T>(Func<IPatternAnalyzer, T> accessor)
        {
            var client = new PatternAnalyzerClient();
                var result = accessor(client.ChannelAnalyzer);
                return result;       
        }
    }    
}

Когда я попробовал запустить упрощенный код, получил зацикливание на строке

return UseProxyClient(pa => pa.AnalyzePatterns(url));

Вопрос ошибка в примере или данное зацикливание следствие упрощения?

READ ALSO
WPF цветовая схема

WPF цветовая схема

Доброго дня! Хочу сделать разделение ресурсов между сборками, так как показано здесь: https://professorwebru/my/WPF/binding_and_styles_WPF/level10/10_7

312
глобально изменить переменную C#

глобально изменить переменную C#

Дело в том что у меня изменяется глобальная переменная внутри блока try, но другой блок не хочет видеть ее измененияИзменял банально x = int

260
Telegram bot сохранение фотографий

Telegram bot сохранение фотографий

Здравствуйте, сейчас пишу telegram-bot на c# и возникла следующая проблема: как сохранять картинки у пользователя на устройстве в определенной...

293
Загрузка XML в БД на C#

Загрузка XML в БД на C#

Добрый деньНеобходимо распарсить XML файл следующего вида

209