2015-01-28 3 views
1

asp.net MVC 웹 응용 프로그램 내에서 코드 호출을 제한하는 방법에 대한 조언이 필요합니다. 우리는 Salesforce에 호출하는 것과 관련된 복잡한 작업을 처리하는 클래스가 있습니다. ComplexSfLogic.cs이라고합시다.동시 호출을 줄이기위한 최선의 방법

Salesforce는 한 번에 최대 10 개의 동시 요청을 처리 할 수 ​​있으며 논리가 복잡하고 사용자 수가 많기 때문에이 한도에 맞서고 있습니다.

은 한 번에 하나씩 리소스에 대한 액세스를 제한하는 데 사용할 수 있지만 한 번에 10 개로 제한하여 10 개가 넘는 동시 발생시 본인 클래스에 대한 호출을 본질적으로 제한하려고합니다.

나는 이것을 coding up a solution으로 처리하는 많은 방법을 생각할 수 있지만 설명하는 것처럼 메서드 호출을 조절할 수있는 최상의 연습 또는 기존 .net 클래스가 있습니다. 가장 큰 문제는 답변을 검색 할 때 올바른 키워드를 사용하지 않아서 어떤 방향으로도 감사 할 것이라고 생각합니다.

나는 ServiceThrottlingBehavior 클래스를 WFC 호출을 직접적으로 제한하는 것으로 보았지만, 어떤 경우에는 복수 호출을하고 함께 그룹화해야하기 때문에 ComplexSfLogic.cs 클래스에서 제한이 필요합니다. 감사!

+1

초기 카운트가 10 인'SemaphoreSlim'? – EZI

+0

이것은 디자인 문제처럼 보입니다. 우선 SemaphoreSlim을 사용하는 것은 단일 프로세스 내에서만 작동하며 일반 세마포어는 단일 시스템 내에서만 작동하므로이 솔루션은 완전히 확장 불가능합니다. 서버 및 서버에서의 오류 처리가 필요합니다. 또는 더 나은 솔루션은 MSMQ 또는 RabitMQ를 사용하여 대기열을 사용하는 메커니즘 일 수 있습니다. –

답변

3

SemaphoreSlim을 사용하십시오. 임계 영역에있는 스레드 수에 대한 제한을 설정할 수 있습니다. 또한 많은 스레드가 대기 중이고 대기중인 경우 좋은 생각이 될 수있는 async도 지원합니다.

또한 이것을로드 차단기로 사용하고 x 밀리 초 (또는 즉시) 후에 세마포어를 가져 오지 못하면 운영 체제를 실패 할 수 있습니다.

+0

정말 고마워요! 그게 정확히 내가 찾던 것이 었습니다. –

관련 문제