2017-02-13 1 views
0

IIS8에서 실행되는 표준 ASP.NET (Web Forms) 응용 프로그램을 사용하여 웹 사이트에서 요청을 처리하는 데 너무 많은 시간이 소요되는 불만을 받고 있습니다.ASP.NET에서 HTTP 모듈과 HTTP 처리기 사이의 내부 지연

깊은 조사와 로그인 한 후 나는 지연이 어디 내 마지막 HTTP 모듈 PreRequestHandlerExecute 이벤트 종료 후 발생하는 것으로 파악하고 한 내 HTTP 처리기 이 ProcessRequest 이벤트 전에.

내가 이해하는 한, 파이프 라인의이 부분은 IIS와 ASP.NET 프레임 워크에 의해 절대적으로 관리됩니다. 지연이 발생할 때 모듈 및 처리기 처리 스레드 ID가 변경되는 것을 보았습니다.

나는 문서의 톤을 읽은 이러한 지연에 대한 이유가 될 수있는 작업 해상도 :(

에 가까운 없어? 사전에

감사를

+0

처리기가 [IRequiresSessionState] (https://msdn.microsoft.com/en-us/library/system.web.sessionstate.irequiressessionstate (v = vs.110) .aspx)을 구현합니까? 지연은 세션 데이터를 차단/잠그기 때문일 수 있습니다. –

+0

John, 답변 해 주셔서 감사합니다. 내 처리기 실제로 세션을 구현하고 사용합니다. 이러한 잠금에 대한 해결책이 있습니까? – Skatrix

+0

잠금 장치를 해결하기위한 답변을 추가했지만 문제가 아닌 것으로 들립니다. –

답변

0

사이트가 아닙니다 느림 : 대기 중임

ASP.NET은 세션 ID 당 하나의 스레드 만 실행할 수 있습니다. 사용자가 두 개의 탭을 열고 동일한 세션 ID로 두 개의 웹 요청을 제출하려고 시도하면 두 번째 스레드는 첫 번째 완료.

토론 및 다른 해결책을 보려면 I just discovered why all asp.net websites are slow을 참조하십시오.

가장 쉬운 대답은 ... 처리기가 세션 변수에 대한 읽기 액세스 만 필요로하는 경우 IRequireSessionState 대신 IReadOnlySessionState을 구현하십시오. 이렇게하면 핸들러가 적어도 자신과 동시에 실행할 수 있습니다.

최근에 출시 된 Microsoft's brand new async session state module을 사용할 수 있습니다. 그것은 작동해야합니다. 그렇다면 this question으로 대답하십시오.

+0

답해 주셔서 감사합니다.하지만 유감 스럽지만 사실이 아닙니다. ("브라우저 당 단일 세션"제한에 대해 알고 있지만 지연은 첫 번째 요청에 의해 차단 된 두 번째 요청을 참조하지 않지만 IIS에서 언제든지 지연되는 첫 번째 요청에. – Skatrix

+0

BTW, 서버 쪽에서이 문제를 조사하는 동안 몇 가지 추가 사항을 언급했습니다. 우선 서버에서 나는 요청을 처리하는 스레드의 ID가 지연된 후에 변경된 것을 확인합니다. 실패 요청 추적 로그를 사용할 수 있지만 어떤 이유로 불완전한 로그가 발생합니다 요청 요약에서 일부 요청이 처리되는 데 40 초가 걸렸지 만 로그는 지연 시작 지점까지만 자세한 로그를 표시합니다 (GENERAL_READ_ENTITY_START 로그 항목) . 그리고 나서 로그 나누기 ... : (( – Skatrix