2009-12-23 4 views
0

X-mas 휴일 마지막 며칠 동안 IHttpAsyncHandler a의 구현을 사용하여 ASP.NET 응용 프로그램을 통해 원격 공유에서 XML 파일을 읽으려고 할 때 UnathorizedAccessException으로 어려움을 겪었습니다. IRequiresSessionState가 길어집니다.IHttpAsyncHandler로 인해 UnathorizedAccessException이 발생합니다.

많은 두통이 있었고 처리기 외부 코드가 완벽하게 작동했음을 알았는데 (액세스 권한 부여 참조) 스레드 문제 일 수 있다고 생각하여 IHttpAsyncHandler를 IHttpHandler로 변경하여 문제가 사라졌습니다.

무엇 IHttpAsyncHandler 구현 (따라서, 나는 때문에 BeginProcessRequest 및 EndProcessRequest 사용하지 않은 경우 테스트 목적으로, 실제로 사용하지 않았다, 여기에 나를 놀리는 -.. 단지 동기화 버전, processRequest라는

수 누구나이 문제를 즉시 설명하려고합니까?

나중에 응용 프로그램에서 전달할 값을 미리 캐시 할 수 있으므로 처리기를 비동기 적으로 사용하면 몇 가지 유용한 점이 있습니다. 그러나 작동하려면 나중에 사용해야합니다. IHttpAsyncHandler를 구현할 때만 나타나는 보안 문제를 전달하십시오.

친절한 도움을 위해 미리 감사드립니다. :-)

답변

1

ASP.NET 인프라는 impl이 진정으로 비동기인지 여부와 관계없이 비동기 처리기를 다르게 호출합니다. 네트워크 리소스에 액세스하기 위해 가장 (impersonation)에 의존 할 가능성이 있습니까? 내 생각 엔 필요한 WindowsIdentity가 실제로 요청을 처리 한 스레드 풀 스레드로 전달되지 않았을 것입니다. (나는 가장과 비동기 처리기를 사용 해본 적이 한번도 없었지만 과거에는 다른 스레드 상태 플로우 이슈와 함께 해왔습니다.)

상관없이 진정한 비동기 처리기는 올바르게 구현하는 데 비용이 많이 듭니다. 다른 비동기 인프라 스트럭처 (비동기 파일 I/O, 비동기 DB 클라이언트 등)를 기반으로 구축하지 않는 한, 아무리 좋은 일도하지 않습니다 (실제로 최상의 경우에도 비동기 핸들러는 원시 코드를 손상시킵니다. 공연). 나는 당신의 성능 요구가 비동기 처리기의 여분의 번거 로움과 오버 헤드를 정말로 정당화 할 필요가 있는지 살펴볼 것입니다 (예를 들어, 프로세스의 스레드보다 많은 동시 요청을 처리해야하는 경우 등).

+0

답변 해 주셔서 감사합니다. 당면한 과제는 일부 정보를 해결하기 위해 HEAD 수준에서 가능한 외부 URI를 조회해야한다는 것입니다. 동 기적으로 문제가 발생하면 처리하는 데 오랜 시간이 걸릴 수 있습니다. 왜 비동기식 프로세스에 대해 생각하고 있었습니까? 혜택을 구현하는 데 드는 시간과 비교할 때 혜택이 적다면 즉시 사용하도록 고려해야 할 수도 있습니다. 나는 어떤 종류의 명의도하지 않습니다. 지금은 기본적으로 ApplicationPoolIdentity 인 AppPool에 적용된 설정에 의존합니다. –