wcf 서비스에 수백 개의 동시 요청을 보낼 수있는 응용 프로그램이 있습니다. 서비스가 http 연합 바인딩을 노출하고 있습니다.WCF 클라이언트 성능 문제
현재 하나의 클라이언트와 TPL을 사용하여 여러 스레드에서 요청을 보내고 있습니다. windows가 최대 동시 요청 수 (2 개)를 wcf로 제한하지 않도록 system.net 최대 연결 설정을 1000으로 변경했습니다.
인증 토큰 등을 받기 때문에 초기 요청에 더 많은 시간이 소요됨을 알 수 있습니다. 그런 다음 요청 시간이 일반적으로 크게 줄어들지 만 서버 로그와 상관 관계가없는 일부 스파이크가 간헐적으로 발생합니다. 나는 가지고있다.
이것이 높은 스루 업 확장 성 높은 클라이언트에 접근하는 가장 좋은 방법인지 궁금합니다.
여러 스레드간에 공유 클라이언트 프록시를 사용하고 여러 스레드간에 ChannelFactory를 공유하려고했습니다. 모든 스레드는 TPL을 사용하여 완료됩니다.
양쪽 WCF 서비스와
<basicHttpBinding>
<binding name="Binding1" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:05:00" closeTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" algorithmSuite="Default"/>
</security>
</binding>
</basicHttpBinding>
테스트 클라이언트 컴퓨터에는 몇 개의 CPU가 있습니까?일반적으로 진정한로드 테스트를 수행하려면 모든 스레드 및 요청을 생성하려고하는 클라이언트 시스템에서 처리 제한 사항을 실행할 때 여러 기계를 실행해야합니다. –
나는 쿼드 코어 8 기가 바이트 상자 클라이언트 컴퓨터로, 그리고 정말 상자를 강조하지, 나는 각각 100 요청을 보내는 10 스레드를 실행하지만 samll 기간 서버에 대한 스파이크가 되길 바란다,하지만 그것은 doesnt –
원한다면, 당신은 스레드 풀의 최소 스레드 수를 늘림으로써 "예열"기간을 줄일 수 있습니다. .net은 즉시 분당 최대 증가하고 초당 2 스레드와 같은 최대 값까지 미터 아웃합니다. –