Я новичок в WCF.Первоначально я создал службу WCF и использовал сгенерированный клиентский прокси-сервер для использования сервиса от клиента.Поэтому всякий раз, когда я выполнял некоторые операции с сервисом, все выполнялось последовательно, так как я вызываю операции синхронно.Я изменил режим параллелизма на несколько, но все равно операции происходили синхронно.Затем я сгенерировал асинхронные методы для своих операций и использовал шаблоны начала / конца, которые, как я предполагаю, «освободили» канал и позволили операциям выполняться параллельно / асинхронно, увеличивая пропускную способность моих приложений.
Затем я использовал 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<Int16.MaxValue; i++)
{
channels[i] = factory.CreateChannel();
}
Так что, в принципе, не могли бы вы дать мне знать об основах каналов, рекомендациях, хитростях и т. Д ... и т. Д.:)