WCF - фабрика каналов vs клиентская база

Я новичок в WCF. Первоначально я создал службу WCF и использовал сгенерированный клиентский прокси для потребления службы от клиента. Поэтому всякий раз, когда я выполнял некоторые операции на службе, все выполнялось последовательно, поскольку я вызывал операции синхронно. Я изменил режим параллелизма на множественный, но все равно операции выполнялись синхронно. Затем я создал асинхронные методы для своих операций и использовал шаблоны begin/end, что, как я полагаю, "освободило" канал и позволило операциям выполняться параллельно/асинхронно, увеличивая пропускную способность моих приложений.

Затем я использовал ChannelFactory для создания канала и выполнял операции, поскольку клиент и сервер могут совместно использовать контракты (один и тот же проект). Но IClientChannel предоставляет только BeginOpen/EndOpen/BeignClose/EndClose. У него нет методов ClientBase от BeginOperation/EndOperation. Поэтому я не могу асинхронно выполнить операцию на канале, чтобы освободить его и использовать для выполнения других операций.

Я просто создал каналы для каждой операции и это решило проблему

Итак, мой вопрос:

  1. Что лучше (ClientBase vs. ChannelFactory) для моего сценария, особенно я хочу выполнять несколько операций над объектом сервиса одновременно с несколькими потоками

  2. Целесообразно ли создавать канал для каждой операции?

  3. На самом деле, я думал, что у нас может быть только один канал между двумя конечными точками (клиент/сервис). Но я могу создать столько каналов, сколько захочу. Например: я смог создать Int16.MaxValue каналов. Поэтому я не уверен, каково ограничение и рекомендации по этому поводу.

    Service[] channels = new IService[Int16.MaxValue];
    
    for(int i = 0; i

В общем, не могли бы вы рассказать мне об основах каналов, рекомендациях и трюках и т.д. и т.п.:)

22
задан marc_s 16 October 2011 в 10:29
поделиться