WCF ChannelFactory
От: Rothmans  
Дата: 24.06.09 09:18
Оценка:
Привет всем,

Читаю книжку про WCF.
Пишут, что ChannelFactory используется для создания прокси "на ходу".
Не возьму в толк, в чем отличие ChannelFactory от использования конструктора прокси класса?
Использование ChannelFactory как и явное использование конструктора требует указания типа интерфейса.
Параметры требуются одинаковые, что для ChannelFactory, что для конструктора прокси-класса.
Абстрактный класс ChannelFactory не предоставляет обобщенного методоа CreateChannel (требуется инстациировать шаблон типом интерфейса прежде чем его использовать), т.е. его нельзя использовать как абстрактную фабрику.

В чем прикол ChannelFactory? Какие у него преимущества перед явным конструированием прокси-объекта?
Re: WCF ChannelFactory
От: baranovda Российская Империя  
Дата: 24.06.09 09:56
Оценка:
Здравствуйте, Rothmans, Вы писали:

R>В чем прикол ChannelFactory? Какие у него преимущества перед явным конструированием прокси-объекта?


В MSDN этот вопрос освещён скудно, и я могу ошибаться, но емнип ChannelFactory целесообразно использовать в том случае, если подлежащий протокол коммуникации поддерживает возможность постоянного соединения, например, HTTP 1.1. В этом случае все клиенты, порождаемые ChannelFactory, могут совместно использовать общее TCP/IP — соединение.
Re: WCF ChannelFactory
От: arkhivania  
Дата: 28.06.09 15:16
Оценка: 3 (2)
Здравствуйте, Rothmans, Вы писали:

R>Привет всем,


R>В чем прикол ChannelFactory? Какие у него преимущества перед явным конструированием прокси-объекта?


Я использую ChannelFactory в том случае, когда не хочется генерить промежуточные классы прокси. Возможно использовать одни и те же интерфесы клиента и сервера без генерации промежуточных классов. Примеров очень много в интернете. Вот нашел например вот здесь.
Re: WCF ChannelFactory
От: IB Австрия http://rsdn.ru
Дата: 28.06.09 18:04
Оценка:
Здравствуйте, Rothmans, Вы писали:

R>В чем прикол ChannelFactory? Какие у него преимущества перед явным конструированием прокси-объекта?

Имеется ввиду ChannelFactory vs автогенеренный наследник ClientBase<T>?
http://blogs.gotdotnet.ru/personal/bezzus/CommentView.aspx?guid=d3e4d152-8a66-4c93-a41b-e759f0f1f61b
Мы уже победили, просто это еще не так заметно...
Re[2]: WCF ChannelFactory
От: Rothmans  
Дата: 29.06.09 22:39
Оценка:
Здравствуйте, IB, Вы писали:

IB>Здравствуйте, Rothmans, Вы писали:


R>>В чем прикол ChannelFactory? Какие у него преимущества перед явным конструированием прокси-объекта?

IB>Имеется ввиду ChannelFactory vs автогенеренный наследник ClientBase<T>?
IB>http://blogs.gotdotnet.ru/personal/bezzus/CommentView.aspx?guid=d3e4d152-8a66-4c93-a41b-e759f0f1f61b

Да, это и имеется в виду. По ссылке поучительно, но я делаю вывод, что с точки зрения чистой функциональности отличий нет.
Re[3]: WCF ChannelFactory
От: IB Австрия http://rsdn.ru
Дата: 30.06.09 08:28
Оценка:
Здравствуйте, Rothmans, Вы писали:

R>Да, это и имеется в виду. По ссылке поучительно, но я делаю вывод, что с точки зрения чистой функциональности отличий нет.

Ну, как сказать. Proxy является оберткой над channel factory, которая предоставляет дополнительную функциональность из коробки. Если эта функциональность не нужна или вообще мешается, то большего контроля над поведением можно добиться используя ChannelFactory напрямую. Так что сказать, что с точки зрения чистой функциональности отличий нет — нельзя, proxy, как минимум, заниматется довольно интеллектуальным кешированием ChannelFactory, в зависимости от сценария использования.
... << RSDN@Home 1.2.0 alpha 4 rev. 1082>>
Мы уже победили, просто это еще не так заметно...
Re[4]: WCF ChannelFactory
От: Tom Россия http://www.RSDN.ru
Дата: 30.06.09 11:26
Оценка:
Здравствуйте, IB, Вы писали:

IB>Здравствуйте, Rothmans, Вы писали:


R>>Да, это и имеется в виду. По ссылке поучительно, но я делаю вывод, что с точки зрения чистой функциональности отличий нет.

IB>Ну, как сказать. Proxy является оберткой над channel factory, которая предоставляет дополнительную функциональность из коробки. Если эта функциональность не нужна или вообще мешается, то большего контроля над поведением можно добиться используя ChannelFactory напрямую. Так что сказать, что с точки зрения чистой функциональности отличий нет — нельзя, proxy, как минимум, заниматется довольно интеллектуальным кешированием ChannelFactory, в зависимости от сценария использования.

Было бы здорово увидеть "правильный" пример использования ChannelFactory. А то я уже подозреваю что у нас он не кошерный, правда вопросы производительности при создании ChannelFactory миеня мало волнуют. Волнует скорее правильная работа с ресурсами.
Народная мудрось
всем все никому ничего(с).
Re[5]: WCF ChannelFactory
От: IB Австрия http://rsdn.ru
Дата: 30.06.09 12:44
Оценка:
Здравствуйте, Tom, Вы писали:

Tom> А то я уже подозреваю что у нас он не кошерный, правда вопросы производительности при создании ChannelFactory миеня мало волнуют. Волнует скорее правильная работа с ресурсами.

Ты про это?
http://blogs.gotdotnet.ru/personal/bezzus/PermaLink.aspx?guid=bb434529-aec5-4b52-945d-5d777911d9de
... << RSDN@Home 1.2.0 alpha 4 rev. 1082>>
Мы уже победили, просто это еще не так заметно...
Re[6]: WCF ChannelFactory
От: Tom Россия http://www.RSDN.ru
Дата: 30.06.09 13:26
Оценка:
Здравствуйте, IB, Вы писали:

IB>Здравствуйте, Tom, Вы писали:


Tom>> А то я уже подозреваю что у нас он не кошерный, правда вопросы производительности при создании ChannelFactory миеня мало волнуют. Волнует скорее правильная работа с ресурсами.

IB>Ты про это?
IB>http://blogs.gotdotnet.ru/personal/bezzus/PermaLink.aspx?guid=bb434529-aec5-4b52-945d-5d777911d9de

наверное Правильно ли я понимаю что если мы создаём прокси налету например так:

    public class SupervisorServiceClient
    {
        /// <summary>
        /// Gets instance of ICatiConsoleWS web service.
        /// </summary>
        public static ISupervisorService supervisorService
        {
            get
            {
                ChannelFactory<ISupervisorService> factory = new ChannelFactory<ISupervisorService>("SupervisorServiceEndpoint");
                factory.Endpoint.Address = new EndpointAddress(factory.Endpoint.Address.Uri + BackendInstance.Current.Name);

                return factory.CreateChannel();
            }
        }
    }


То то, инстанс который возвращается методом CreateChannel надо закрывать кастя экземпляр к ICommunicationObject и вызывая Close? Чем может грозить не вызов Close?
Народная мудрось
всем все никому ничего(с).
Re[7]: WCF ChannelFactory
От: baranovda Российская Империя  
Дата: 30.06.09 14:43
Оценка: 10 (1)
Здравствуйте, Tom, Вы писали:

Tom>То то, инстанс который возвращается методом CreateChannel надо закрывать кастя экземпляр к ICommunicationObject и вызывая Close? Чем может грозить не вызов Close?


Исчерпанием лимита соединений.

Лечится установкой атрибутов элемента конфигурации serviceThrottling в запредельные значения.

Обсуждалось ещё и здесь: http://www.rsdn.ru/forum/dotnet/2987689.flat.aspx
Автор: baranovda
Дата: 15.06.08
Re[7]: WCF ChannelFactory
От: IB Австрия http://rsdn.ru
Дата: 30.06.09 16:05
Оценка: 10 (1)
Здравствуйте, Tom, Вы писали:

Tom>То то, инстанс который возвращается методом CreateChannel надо закрывать кастя экземпляр к ICommunicationObject и вызывая Close?

Да.

Tom>Чем может грозить не вызов Close?

Соединение будет болтаться открытым и не вернется в пул.
... << RSDN@Home 1.2.0 alpha 4 rev. 1082>>
Мы уже победили, просто это еще не так заметно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.