У меня есть веб-уровень, который переадресовывает вызовы на уровень приложения. Для этого веб-уровень использует общий, кэшированный канал. Службы уровня приложения, о которых идет речь, являются безстоящими и имеют возможность параллелизма.Параллельные вызовы WCF через общий канал
Но они не называются одновременно.
Если я перехожу к веб-уровню для создания нового канала при каждом вызове, я получаю параллельные вызовы на уровне приложения, а do. Но я хочу избежать этой стоимости, поскольку она функционально не нужна для моего сценария. У меня нет состояния сеанса, и мне также не нужно повторно аутентифицировать вызывающего абонента каждый раз. Я понимаю, что создание фабрики каналов намного дороже, чем создание каналов, но это по-прежнему стоимость, которую я бы хотел избежать, если это возможно.
Я нашел this article на MSDN, который гласит:
В то время как каналы и клиенты, созданные каналы являются поточно-, они могут не поддерживать писать больше, чем один сообщение для провода одновременно. Если вы отправляете большие сообщения, особенно в случае потоковой передачи, отправьте операцию можно заблокировать в ожидании другой отправить.
Во-первых, я не отправляю большие сообщения (только много маленьких, так как я выполняю нагрузочное тестирование), но я все еще вижу поведение блокировки. Во-вторых, это довольно открытая и бесполезная документация. В нем говорится, что они «не могут» поддерживать запись более одного сообщения, но не объясняют сценарии, в которых они будут поддерживать параллельные сообщения.
Может ли кто-нибудь пролить свет на это?
Приложение: Я также рассматриваю возможность создания пула каналов, которые веб-сервер использует для выполнения запросов. Но опять же, я не вижу причин, почему мой существующий подход должен блокироваться, и я предпочел бы избежать сложности, если это возможно.
отлично. не могли бы вы добавить ссылку? –
Честно говоря, я не думаю, что у меня есть. Существуют различные сообщения, такие как http://blogs.msdn.com/b/mjm/archive/2006/11/13/auto-open-part-1.aspx, который предоставил мне подсказки, но я не видел того, что явно показывало, как автоматическое открытие исключает одновременные вызовы. Я помню, что намеревался сделать свой собственный пост в то время, но так и не добрался до него. Я добавлю его в свою очередь и отправлю сюда, когда все закончится. –
Не могли бы вы привести пример кода, как создать канал? Я борюсь с той же проблемой, и вызов Open() на ChannelFactory не помогает в моем случае. –