powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / О применении SOLID
25 сообщений из 159, страница 2 из 7
О применении SOLID
    #38512793
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КLRпропущено...

Вопрос немного не по теме (генерации), но мне показался достаточно важным
пропущено...

Каждый раз для создания канала создается фабрика, но создание фабрики вроде как дорогостоящая операция (по сравнению с созданием канала)... почему бы не закэшировать фабрику?В следующих версиях WCF они обещали оптимизировать создание ChannelFactory<>, где-то была статья об этом. Вероятно в 4.5 это уже оптимизировано. Проверить это у меня сейчас нет возможности.

При повторном использовании одного объекта фабрики для создания нескольких Channel-ов возникали проблемы. Какие - я сейчас точно не вспомню, надо опять делать тест и читать MSDN. Но точно помню, что проблемы были, что-то там не работало. :-)

LRP.S. Алексей, спасибо за Ваши труды на благо сообщества!Пасиб. :-)

А зачем создавать несколько ChannelFactory, если это обобщенный класс? ChannelFactory - это пул соединений, какие причины плодить их на клиенте?
Не хочется статиков? Так для этого есть DI, который ты не осилил и без которого не бывает вменяемых фреймворков.
В net 4.5 его действительно оптимизировали и соединения кэшируются даже если меняется учетка. Помимо этого в wcf появилаcь нативная поддержка тасков и твои танцы с бубнами(FromAsync) совсем не нужны, а мультики в сервисах с ThreadStatic - просто вредны. EF теперь тоже асинхронный и сервисы можно и нужно делать с тасками. Это гораздо больше будет влиять на wcf сервисы, чем твои мультики с прокси на клиенте. Генерить последние - полный маразм для внутренних сервисов и тд.

ЗЫ SOLID придумали не на пустом месте - это набор принципов, которые нужно соблюдать, чтобы можно было без геморроя развивать систему и вносить в нее изменения, если этого нет, то это кривая архитектура.
...
Рейтинг: 0 / 0
О применении SOLID
    #38512795
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КLRКаждый раз для создания канала создается фабрика, но создание фабрики вроде как дорогостоящая операция (по сравнению с созданием канала)... почему бы не закэшировать фабрику?
Если закешировать, оно в принципе работает. Но тогда нет возможности изменить параметры соединения у фабрики. Она этого не позволяет после создания хотя бы одного канала с помощью неё.

Чисто визуально разницы в работе приложения с кэшированием я не заметил. Из-за дополнительных ограничений для себя решил кэширование не делать.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
    public static class WsFactory
    {
        public static WsConnectionInfo ConnectionInfo { get; set; }

        static readonly ConcurrentDictionary<Type, ChannelFactory> TypeToFactory =
            new ConcurrentDictionary<Type, ChannelFactory>();

        static T GetChannel<T>()
        {
            if (ConnectionInfo == null)
                throw new ArgumentNullException("ConnectionInfo");

            var factory = (ChannelFactory<T>)TypeToFactory.GetOrAdd(
                typeof(T),
                t =>
                {
                    var serviceName = WsClientHelper.GetServiceName(typeof(T));
                    var address = string.Format("net.tcp://{0}/{1}", ConnectionInfo.BaseAddress, serviceName);
                    var endpointIdentity = EndpointIdentity.CreateDnsIdentity("SimpleSolutionProject-Public");
                    var endpointAddress = new EndpointAddress(new Uri(address), endpointIdentity);

                    var r = new ChannelFactory<T>(WsConfiguration.GetNetTcpBinding(), endpointAddress);
                    r.Endpoint.Behaviors.Add(new DataContractSerializerEndpointBehavior());
                    r.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
                    r.Credentials.UserName.UserName = ConnectionInfo.UserName;
                    r.Credentials.UserName.Password = ConnectionInfo.Password;
                    return r;
                }
            );

            return factory.CreateChannel();
        }
    }




Это бред. Дорогостоящая операция - создание соединения, их как раз и кэширует фабрика.
Матчасть нужно знать
...
Рейтинг: 0 / 0
О применении SOLID
    #38512804
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaА зачем создавать несколько ChannelFactory, если это обобщенный класс?Этого не понял.
SeVaChannelFactory - это пул соединений, какие причины плодить их на клиенте?Мне казалось NetTCP пул соединений живёт вне объекта ChannelFactory, так же как пул соединений к БД живёт вне объекта SqlConnection.
SeVaВ net 4.5 его действительно оптимизировали и соединения кэшируются даже если меняется учетка. Помимо этого в wcf появилаcь нативная поддержка тасков и твои танцы с бубнами(FromAsync) совсем не нужныНу мне-то от этого не легче. Мне нужна поддержка WinXP.
SeVaа мультики в сервисах с ThreadStatic - просто вредны. EF теперь тоже асинхронный и сервисы можно и нужно делать с тасками.А мне с ThreadStatic нравится. И от асинхронностей на сервере для своих проектов я пользы не вижу. Только неоправданное усложнение.
SeVaЭто гораздо больше будет влиять на wcf сервисы, чем твои мультики с прокси на клиенте. Генерить последние - полный маразм для внутренних сервисов и тд.Я не хочу использовать серверные классы на клиенте. Мне больше нравится их генерировать через WSDL. И на то есть причины.
SeVaЗЫ SOLID придумали не на пустом месте - это набор принципов, которые нужно соблюдать, чтобы можно было без геморроя развивать систему и вносить в нее изменения, если этого нет, то это кривая архитектура.Ну используй, я не возражаю.
...
Рейтинг: 0 / 0
О применении SOLID
    #38512805
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaАлексей Кпропущено...

Если закешировать, оно в принципе работает. Но тогда нет возможности изменить параметры соединения у фабрики. Она этого не позволяет после создания хотя бы одного канала с помощью неё.

Чисто визуально разницы в работе приложения с кэшированием я не заметил. Из-за дополнительных ограничений для себя решил кэширование не делать.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
    public static class WsFactory
    {
        public static WsConnectionInfo ConnectionInfo { get; set; }

        static readonly ConcurrentDictionary<Type, ChannelFactory> TypeToFactory =
            new ConcurrentDictionary<Type, ChannelFactory>();

        static T GetChannel<T>()
        {
            if (ConnectionInfo == null)
                throw new ArgumentNullException("ConnectionInfo");

            var factory = (ChannelFactory<T>)TypeToFactory.GetOrAdd(
                typeof(T),
                t =>
                {
                    var serviceName = WsClientHelper.GetServiceName(typeof(T));
                    var address = string.Format("net.tcp://{0}/{1}", ConnectionInfo.BaseAddress, serviceName);
                    var endpointIdentity = EndpointIdentity.CreateDnsIdentity("SimpleSolutionProject-Public");
                    var endpointAddress = new EndpointAddress(new Uri(address), endpointIdentity);

                    var r = new ChannelFactory<T>(WsConfiguration.GetNetTcpBinding(), endpointAddress);
                    r.Endpoint.Behaviors.Add(new DataContractSerializerEndpointBehavior());
                    r.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
                    r.Credentials.UserName.UserName = ConnectionInfo.UserName;
                    r.Credentials.UserName.Password = ConnectionInfo.Password;
                    return r;
                }
            );

            return factory.CreateChannel();
        }
    }




Это бред. Дорогостоящая операция - создание соединения, их как раз и кэширует фабрика.
Матчасть нужно знатьНу, а там что закешировано? Жжошь?
...
Рейтинг: 0 / 0
О применении SOLID
    #38512808
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaпропущено...


Это бред. Дорогостоящая операция - создание соединения, их как раз и кэширует фабрика.
Матчасть нужно знатьНу, а там что закешировано? Жжошь?

Учи матчасть, что из себя представляет канальная фабрика подробно разжевано в msdn. WCF основан на каналах , а это целое кино. Без понимания, которого появляются маразмы и отжиги со статиками для channelfactory
...
Рейтинг: 0 / 0
О применении SOLID
    #38512818
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaУчи матчасть, что из себя представляет канальная фабрика подробно разжевано в msdn. WCF основан на каналах , а это целое кино. Без понимания, которого появляются маразмы и отжиги со статиками для channelfactoryФраза "connection pool" в тексте этой статьи не найдена. Зачем ты дал на неё ссылку?
...
Рейтинг: 0 / 0
О применении SOLID
    #38512820
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КА мне с ThreadStatic нравится. И от асинхронностей на сервере для своих проектов я пользы не вижу. Только неоправданное усложнение.
SeVaЭто гораздо больше будет влиять на wcf сервисы, чем твои мультики с прокси на клиенте. Генерить последние - полный маразм для внутренних сервисов и тд.Я не хочу использовать серверные классы на клиенте. Мне больше нравится их генерировать через WSDL. И на то есть причины.


1. Причины сразу видны, если провести хотя бы раз нагрузочное тестирование.
ThreadStatic на данный момент, когда есть await - натуральное убожество и костыль, которые все усложняет в разы с малопонятным поведением и устойчивостью
2. Никаких причин нет, тк генерим только мусор и повторно создаем классы и интерфейсы.
Подозреваю, что все это из-за извратов с наследованием и прочих мультиков, так это тоже маразм.
Гораздо проще создать view в бд и на автомате использовать EF, а не вышивать крестиком вручную собирая классы.
Никакого наследования в DTO(бизнес-классами у тебя даже не пахнет) быть не должно, рано или поздно функционал разбежится по разным углам.
...
Рейтинг: 0 / 0
О применении SOLID
    #38512822
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaУчи матчасть, что из себя представляет канальная фабрика подробно разжевано в msdn. WCF основан на каналах , а это целое кино. Без понимания, которого появляются маразмы и отжиги со статиками для channelfactoryФраза "connection pool" в тексте этой статьи не найдена. Зачем ты дал на неё ссылку?

Чтобы ты хотя слегка имел представление о wcf. Эта статья для чайников
...
Рейтинг: 0 / 0
О применении SOLID
    #38512825
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaУдачи!
...
Рейтинг: 0 / 0
О применении SOLID
    #38512826
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
О применении SOLID
    #38512829
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa тынц автор.NET Framework 4.5
...
Рейтинг: 0 / 0
О применении SOLID
    #38512893
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaChannelFactory - это пул соединений, какие причины плодить их на клиенте?Мне казалось NetTCP пул соединений живёт вне объекта ChannelFactory, так же как пул соединений к БД живёт вне объекта SqlConnection.Так и есть. Netstat.exe показывает, что WCF-ный NetTCP пул соединений на клиенте работает нормально.
...
Рейтинг: 0 / 0
О применении SOLID
    #38512904
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,


Алексей КSeVa тынц автор.NET Framework 4.5

Фабрика каналов была и есть в net 3.5.
...
Рейтинг: 0 / 0
О применении SOLID
    #38512914
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaАлексей К,


Алексей Кпропущено...
пропущено...


Фабрика каналов была и есть в net 3.5.Ну и что? Там оптимизации про которые ты пишешь добавлены, и про которые я тоже писал , добавлены в 4.5.
...
Рейтинг: 0 / 0
О применении SOLID
    #38512916
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавлены
...
Рейтинг: 0 / 0
О применении SOLID
    #38512937
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaАлексей К,


пропущено...


Фабрика каналов была и есть в net 3.5.Ну и что? Там оптимизации про которые ты пишешь добавлены, и про которые я тоже писал , добавлены в 4.5.

ChannelFactory был еще со времен net 3.5. В wpf&wcf большие возможности, посему они за раз не осваиваются, правильные подходы тем более. Посему лучше не изобретать свои велосипеды(в особенности, когда скачешь только по верхам и глубоко не копаешь), а брать готовое.
Все давно придумано до нас. Например, Exception Handling WCF Proxy Generator . Есть интеграция с vs и восстановление при сбоях.
...
Рейтинг: 0 / 0
О применении SOLID
    #38513052
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

круто давать ссылки на проекты,не обновляющиеся 3 года и имеющие статус бета.
...
Рейтинг: 0 / 0
О применении SOLID
    #38513084
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Говнокостыли нужны вам, вы привыкли только кнопочки в студии нажимать без всякого понимания.
В одном резюме попалась фраза : "с# на уровне пользователя". Сапотски тоже про себя мог бы это написать
...
Рейтинг: 0 / 0
О применении SOLID
    #38513091
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaВ одном резюме попалась фраза : "с# на уровне пользователя". Сапотски тоже про себя мог бы это написать
Ну мог бы чо...
...
Рейтинг: 0 / 0
О применении SOLID
    #38513141
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЕсли закешировать, оно в принципе работает. Но тогда нет возможности изменить параметры соединения у фабрики. Она этого не позволяет после создания хотя бы одного канала с помощью неё.

Чисто визуально разницы в работе приложения с кэшированием я не заметил. Из-за дополнительных ограничений для себя решил кэширование не делать.
Алексей, спасибо за разъяснения. Получается, без кэширования оно и надежней (мало ли что случится с фабрикой) и гибче (например, пользователь "на лету" сможет перелогиниться и т.п.)... а проблема производительности - это особый случай/задача (не Ваш случай).
...
Рейтинг: 0 / 0
О применении SOLID
    #38513154
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ребятки, подхалтурить не желаете?
...
Рейтинг: 0 / 0
О применении SOLID
    #38513241
hr_hr_hr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 часа и ни одного резюме. Ну и куда прикажете деньги девать...?
...
Рейтинг: 0 / 0
О применении SOLID
    #38513270
Фотография James Bond FR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hr_hr_hr2 часа и ни одного резюме. Ну и куда прикажете деньги девать...?
Вложите туда где нет слова - азуре. На сегодня это глючная херь с которой никто не хочет связываться.
...
Рейтинг: 0 / 0
О применении SOLID
    #38513288
hr_hr_hr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
James Bond FR,

да мне не принципиально где хостить. Да и азур хлопот не доставлял(кроме аптайма блобов)
...
Рейтинг: 0 / 0
О применении SOLID
    #38513880
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЭта "красота" вызовет в дальнейшем необходимость описания специального DTO, что нарушает моё представление о DRY, но об этом ниже. Одним словом - оно того не стоит.Алексей КБизнес-объекты слоя данных и логики применяются в том числе в качестве DTO, чтобы не описывать одинаковые структуры данных в нескольких местах.Всё это замечательно работает пока один формат хранения данных, один формат их передачи, один способ получения.

Но что будет, если при развитии проекта, что-то добавится, или изменится? Насколько Ваше решение гибкое и масштабируемое?
...
Рейтинг: 0 / 0
25 сообщений из 159, страница 2 из 7
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / О применении SOLID
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]