У меня есть веб-уровень, который перенаправляет вызовы на уровень приложения. Для этого веб-уровень использует общий кешированный канал. Указанные службы уровня приложения не имеют состояния и имеют параллельный доступ.
Но они не вызываются одновременно.
Если я изменяю веб-уровень для создания нового канала при каждом вызове, то я делаю получаю параллельные вызовы на уровне приложения. Но я хочу избежать этой стоимости, поскольку она функционально не нужна для моего сценария. У меня нет состояния сеанса, и при этом мне не нужно повторно проходить проверку подлинности вызывающего абонента каждый раз. Я понимаю, что создание фабрики каналов намного дороже, чем создание каналов, но все же это цена, которую я хотел бы избежать, если это возможно.
Я нашел эту статью на MSDN, в которой говорится:
Хотя каналы и клиенты созданы
каналы потокобезопасны, они
может не поддерживать написание более
одно сообщение в провод одновременно.
Если вы отправляете большие сообщения,
особенно если потоковая передача
операция может заблокировать ожидание
еще один отправить для завершения.
Во-первых, я не отправляю большие сообщения (просто много маленьких, так как я выполняю нагрузочное тестирование), но все еще наблюдаю поведение блокировки. Во-вторых, это довольно открытая и бесполезная документация. В нем говорится, что они «могут не поддерживать» написание более одного сообщения, но не объясняются сценарии, при которых они будут поддерживать одновременные сообщения.
Может кто-нибудь пролить свет на это?
Приложение. Я также рассматриваю возможность создания пула каналов, которые веб-сервер использует для выполнения запросов. Но опять же, я не вижу причин, по которым мой существующий подход должен блокироваться, и я бы предпочел избежать сложности, если это возможно.