2014-01-15 9 views
0

wcf 서비스 엔드 포인트에서 <serviceThrottling maxConcurrentCalls="2" [테스트 전용]을 설정하고 활성 상태로 유지되는 두 개의 호출을 활성화하고 세 번째 호출을 활성화하면 그 다음에 클라이언트 측이 인 경우이고 아무런 문제없이을 열었습니다.Maxconcurrentcalls 설정 및 통신 채널 열기

필자는 maxConcurrentCalls로 인해 열기가 실패 할 것으로 예상했지만 그렇지 않았습니다. sendtimeout에 도달 한 후에 만 ​​통신은 예외를 제공합니다.

채널을 여는 것이 maxConcurrentCalls에 도달하면 실패하는 것을 선호합니다. 이러한 동작을 구성 할 수 있습니까?

답변

1

Gerard ... 호스트와 클라이언트 사이에 열린 연결이있는 것은 동시 호출과 같은 것이 아닙니다. 이 컨텍스트에서는 동시 호출이 호스트에서 처리 중임을 의미합니다 (호스트가 요청을 수신하고 응답을 보낸 순간). maxConcurrentCalls는 동시에 처리되는 호출 수를 처리하지만 해당 제한을 초과하면 다른 호출 중 하나가 완료되고 새 슬롯이 준비 될 때까지 나머지 요청을 대기시킵니다. 오류는 보내지지 않습니다. 한계에 도달하면 오류가 발생할 수 있다고 생각하지 않습니다.

또한 호스트에 전화를 걸지 않는 한 전화가 너무 빨리 처리되므로 실제로 3 회의 동시 통화를하는 것은 쉽지 않습니다.

흥미롭게도 산업 규모의 WCF 사이트 (basichttpbinding)에서 성능/부하 테스트를 수행하고 maxconcurrentCalls (및 기타 제한 설정)를 1 또는 1000로 설정하면 요청을 처리하는 속도에 큰 영향을 미칩니다. 사실 가장 빠른 속도로 서버를 가동 할 수 있었고 (180 콜/초, 각 파일 업로드) 스로틀 링을 해제하고 WCF가 스스로 관리 할 수 ​​있도록했습니다.

+0

대기열을 놓친 빈 슬롯을 기다리고 있습니다. 메시지 대기열에서만 발생한다고 생각했습니다. 큐잉을 금지 할 수 있습니까? Btw, 나는 테스트에서 연결을 열어두고 절대 닫지 않았습니다. – Gerard

+0

큐잉을 금지 할 수 있는지 확실하지 않습니다. 나는 그렇게 생각하지 않는다. 큐잉 동작은 자동으로 생각합니다. 연결을 닫는 지 또는 닫지 않는지는 바인딩을 선택할 때 고려해야 할 사항입니다. basichttpbinding 또는 wshttpbinding과 같은 http 중심 바인딩 중 하나를 사용하는 경우 연결을 닫지 않아도 클라이언트에만 영향을 미칩니다. 그러나 TCP 바인딩을 사용하는 경우 연결이 지속될 수 있으므로 연결을 명시 적으로 닫아야합니다. – Brian

+0

우리는 wshttpbinding을 사용하고 있습니다. 그러나 클라이언트에서 연결을 처리 할 때 호스트에는 사용하지 않는 슬롯이 있습니다. – Gerard