Я новичок в WCF. Первоначально я создал службу WCF и использовал сгенерированный клиентский прокси для потребления службы от клиента. Поэтому всякий раз, когда я выполнял некоторые операции на службе, все выполнялось последовательно, поскольку я вызывал операции синхронно. Я изменил режим параллелизма на множественный, но все равно операции выполнялись синхронно. Затем я создал асинхронные методы для своих операций и использовал шаблоны begin/end, что, как я полагаю, "освободило" канал и позволило операциям выполняться параллельно/асинхронно, увеличивая пропускную способность моих приложений.
Затем я использовал ChannelFactory
для создания канала и выполнял операции, поскольку клиент и сервер могут совместно использовать контракты (один и тот же проект). Но IClientChannel
предоставляет только BeginOpen/EndOpen/BeignClose/EndClose
. У него нет методов ClientBase
от BeginOperation/EndOperation
. Поэтому я не могу асинхронно выполнить операцию на канале, чтобы освободить его и использовать для выполнения других операций.
Я просто создал каналы для каждой операции и это решило проблему
Итак, мой вопрос:
Что лучше (ClientBase vs. ChannelFactory
) для моего сценария, особенно я хочу выполнять несколько операций над объектом сервиса одновременно с несколькими потоками
Целесообразно ли создавать канал для каждой операции?
На самом деле, я думал, что у нас может быть только один канал между двумя конечными точками (клиент/сервис). Но я могу создать столько каналов, сколько захочу. Например: я смог создать Int16.MaxValue каналов. Поэтому я не уверен, каково ограничение и рекомендации по этому поводу.
Service[] channels = new IService[Int16.MaxValue];
for(int i = 0; i
В общем, не могли бы вы рассказать мне об основах каналов, рекомендациях и трюках и т.д. и т.п.:)