2012-09-24 2 views
0

타사 win32 dll을 모든 비즈니스 논리의 게이트웨이로 사용하는 웹 응용 프로그램 (MVC)을 빌드해야합니다 (로그온 메커니즘, 함수 및 일부 유지 관리) 상태). 이 dll은 멀티 스레딩을 위해 설계되지 않았습니다. MTA 시나리오에서 dll은 특정 시간 후에 비틀 거립니다. ASP-Classic 모드 (Asp-CompatHandler를 사용하는 STA)에서 ASP.NET MVC를 실행하는 것이 좋습니다. 나는 이것을 성공으로 시도했습니다. 모든 것이 안정적으로 실행됩니다. 문제는 동시 사용자가 많으며 일부 함수 호출에는 몇 초 (최대 10 초)가 소요된다는 것입니다. 모든 사용자가 서로를 차단하면 끔찍한 결과를 초래할 것입니다. 동일한 응용 프로그램 내에서 차단 효과를 최소화하는 최선의 방법은 무엇입니까? 10 명의 사용자 만 서로 차단해야한다고 가정 해보십시오.Asp.Net MVC 및 다중 스레드 용으로 설계되지 않은 Win32 DLL

경우 좋을 텐데 ... 웹이 MTA 에서 실행 ... 웹은 한 번만 배포 ... 모든

사람이 나에게 몇 가지 조언을 줄 수 동일한 프로세스 내에서 실행 이것을 해결하는 좋은 개념?

감사합니다.

업데이트 - 해결책을 찾았습니다 : Ami Bar의 "스마트 스레드 풀"덕분에 내가 찾고 있던 동작을 쉽게 수행 할 수있었습니다. 나는 근로자 개념을 구현했다. (사용자가 특정 근로자를 공유하고이 작업자를 서로 차단한다.) 각 근로자에 ​​대해 이제는 최대 스레드 수와 최소 스레드 수를 가진 스레드 풀 인스턴스가 생겼다. 음, 스레드 풀에 대한 아이디어는 아니지만 작업 항목을 처리하는 것이 매우 쉽습니다. 또한 멋진 다른 기능도 있습니다. 웹 응용 프로그램이 MTA에서 실행 중입니다. 몇 시간 동안 안정적인지 확인하기 위해 몇 가지 부하 테스트를 준비 할 것입니다. 여기를 참조하십시오 : http://www.codeproject.com/Articles/7933/Smart-Thread-Pool

답변

0

많은 답변을 드리지는 못하지만 매우 간단합니다. 다중 스레드 환경에서 멀티 스레드 환경에서 사용할 수 있도록 설계되지 않은 것을 사용할 수 없습니다.

이 가능성 : STA

    • 라이브 DLL이 아닌 경우,
  • 0

    불행하게도 웹 응용 프로그램에서 사용하기위한 것입니다 뭔가 단일 스레드 COM 개체를 교체 병렬 요청과 함께 사용하도록 설계된 경우 병렬 요청과 함께 사용할 수 없습니다.

    응용 프로그램을 병렬 실행하지 않고 동시 사용자 수를 늘리는 유일한 해결책은 응용 프로그램의 여러 인스턴스를 동시에 실행하고 그 앞에로드 밸런서를 배치하여 응용 프로그램의 인스턴스를 검색어.