Количество одновременных подключений к серверу контролируется как режимом регулирования службы WCF, так и вашим компьютером (на самом деле это ОС). У машин с Windows XP было жесткое ограничение на 10 одновременных подключений - может ли это быть проблемой? Если вы работаете на сервере, это ограничение не должно применяться.
Режим регулирования службы также имеет значение по умолчанию для MaxConcurrentSessions
, равное 10, и все ваши соединения netTcpBinding будут иметь сеанс транспортного уровня, так что это определенно также проблема.
Вы можете изменить настройки поведения регулирования службы в файле конфигурации вашего приложения:
<serviceBehaviors>
<behavior name="TcpMoreThan10">
<serviceThrottling
maxConcurrentCalls="100"
maxConcurrentSessions="50"
maxConcurrentInstances="50" />
</behavior>
</serviceBehaviors>
и вам необходимо добавить это поведение службы к вашему тегу <service>
, чтобы включить его:
<service name="....." behaviorConfiguration="TcpMoreThan10">
....
</service>
Если у вас есть только до 50 клиентов, которые время от времени звонят, и все они являются «внутренними» клиентами, использующими netTcpBinding, я не вижу веской причины, почему вы хотели бы сделать эту вещь многопоточной синглтоном, на самом деле .
В качестве дополнительного примечания: многопоточные синглтоны, как известно, трудны для написания, сложны для того, чтобы все исправить, вам нужно беспокоиться о параллельном доступе к вашим внутренним переменным и т. Д. - довольно запутанное программирование.
Почему бы не использовать режим экземпляра для каждого вызова по умолчанию? С этим:
- каждый поступающий запрос сообщает свой отдельный, отдельный, только что созданный экземпляр класса обслуживания
- каждый экземпляр класса обслуживания обрабатывает только одного абонента, поэтому нет необходимости в запутанных и сложных многопоточных моделях программирования