Pergunta

Eu tenho um serviço WCF implantado em um aplicativo de console com BasichttpBinding e SSL ativado. O atributo a seguir também é definido:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Eu também defini o comportamento de aceleração para

<serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentSessions="2147483647"
        maxConcurrentInstances="2147483647" />

Por outro lado, criei um cliente de teste (para teste de carga) que inicia vários clientes simultaneamente (vários threads) e executa transações no servidor. Tudo parece bom, mas no servidor a utilização da CPU não aumenta, então adicionei alguns logs para visualizar o número de chamadas simultâneas para o servidor e descobri que ele nunca ultrapassou 6.

Eu revisei o código de registro do contador de desempenho mais que duas vezes e parece bom para mim.

Então, eu quero perguntar onde está o problema nessa situação? Ainda não especifiquei nenhum tipo de contextmode ou concurrencymode.

Após este post, notei que sempre que inicio outra íntima do cliente de teste, meu servidor simultâneo chama o contador de contador para 2, como se eu estiver executando apenas 1 instância, as chamadas máximas de RCVD simultâneas serão 2 e, se houver duas instâncias, o mesmo valor for para 4 e assim por diante. Existe algum limite de número de chamadas do WCF de um processo de uma vez?

******** adicionado em 17 de março ********

Hoje, executei outro teste com um cliente de teste (com 50 usuários simultâneos) na mesma máquina em que o servidor está em execução. Desta vez, estou obtendo o resultado exato o que eu queria mostrar (ou seja, chamadas simultâneas máximas RCVD por servidor = 50).

Mas eu preciso fazer o mesmo em outras máquinas. Alguém pode me ajudar nisso?

Foi útil?

Solução 2

Encontrei uma solução: existe um limite de conexão no ServicePointManager que estava causando esse problema. Para remover esse limite, você só precisa definir

System.Net.ServicePointManager.DefaultConnectionLimit = X;

onde o limite padrão é 2.

Outras dicas

Ou use essa configuração no cliente.

<system.net>
    <connectionManagement>
      <add maxconnection = "200" address ="*" />
    </connectionManagement>
  </system.net>

Aqui 200 é o limite do cliente

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top