Я новичок в WCF. Сначала я создал службу WCF и использовал сгенерированный клиентский прокси, чтобы использовать эту услугу у клиента. Поэтому всякий раз, когда я выполнял некоторые операции над сервисом, все выполнялось последовательно, так как я вызываю операции синхронно. Я изменил режим concurrency на несколько, но все же операции выполнялись синхронно. Затем я сгенерировал асинхронные методы для своих операций и использовал начальные/конечные шаблоны, поэтому я предполагаю, что "освободил" канал, и пусть операции происходят параллельно/асинхронно увеличивая пропускную способность моих приложений.
Затем я использовал ChannelFactory
для создания канала и выполнил операции, так как клиент и сервер могут совместно использовать контракты (тот же проект). Но IClientChannel
предоставляет только BeginOpen/EndOpen/BeignClose/EndClose
. Он не имеет методов ClientBase
BeginOperation/EndOperation
. Поэтому в принципе я не могу выполнить операцию асинхронно на канале, чтобы освободить, чтобы я мог использовать канал для выполнения других операций.
Я просто создал каналы для каждой операции и решил проблему
Итак, мой вопрос:
-
Что лучше (
ClientBase vs. ChannelFactory
) w.r.t для моего сценария, особенно я хочу выполнять несколько операций над объектом службы одновременно с несколькими потоками -
Желательно ли создать канал для каждой операции?
-
Фактически, я думал, что у нас может быть только один канал между двумя конечными точками (клиент/сервис). Но я могу создать столько каналов, сколько захочу. Например: я смог создать Int16.MaxValue каналов. Поэтому не уверен, какой предел и рекомендации по этому поводу.
Service[] channels = new IService[Int16.MaxValue]; for(int i = 0; i<Int16.MaxValue; i++) { channels[i] = factory.CreateChannel(); }
Так что в основном вы можете сообщить мне об основах каналов и рекомендациях и трюках и т.д. и т.д.:)