2011-08-29 2 views
7

동일한 가상 디렉터리 아래에 웹 사이트와 웹 서비스가 있고 일부 웹 페이지가 웹 서비스를 호출합니다.IIS AppDomain 인스턴스화

웹 서비스가 호출 될 때 IIS가 새 AppDomain을 만들거나 동일한 AppDomain에서 웹 서비스를 실행합니까?

설정이 있습니까? 내 컴퓨터에서 새 AppDomain을 만드는 것으로 보입니다. Integrated vs Classic의 응용 프로그램 풀 모드 변경이 영향을 줍니까?

+0

WCF 또는 ASP .NET 웹 서비스? – Jeff

답변

8

IIS 응용 프로그램 풀은 단일 작업자 프로세스 (기본적으로)를 실행합니다. 해당 작업자 프로세스 내에서 각 IIS 응용 프로그램 (웹 사이트)에 대해 AppDomain이 만들어집니다. 내가 아는 한, IIS 응용 프로그램 내에서 실행되는 코드는 동일한 AppDomain에서 실행됩니다 (물론 코드에서 직접 자식 응용 프로그램 도메인을 만드는 경우는 제외). 웹 사이트 당 작업자 프로세스 수를 조정할 수 있지만 성능 문제가있는 경우 (응용 프로그램 풀을 분리하여 해결할 수없는 경우)에만 현실적으로 수행 할 수 있습니다. 웹 사이트 당 여러 개의 응용 프로그램 도메인을 실행하는 경우 별도의 응용 프로그램 도메인에서 실행되는 코드는 상태 (예 : InProc 세션)를 공유 할 수 없으며 이상적이지 않은 직렬화를 통해서만 통신 할 수 있습니다.

ASP.NET 및 WCF와 관련하여; IIS에서 호스팅 될 때 기본적으로 side-by-side 모드로 실행되며 동일한 AppDomain 내에서 상태를 공유 할 수 있지만 WCF 요청은 ASP.NET 런타임에 의해 처리되지 않고 대신 WCF 서비스에 대한 호출이 가로 채어 처리됩니다 WCF 런타임에 의해. (.svc 파일에 대한 호출이 처음에는 여전히 ASP.NET을 통해 라우트되지만). side-by-side 모드에서 WCF 호출은 ASP.NET 웹 사이트에 대해 구성한 구성, 보안, 가장 등을 따르지 않습니다.

IIS의 WCF는 ASP.NET 호환 모드에서 실행할 수도 있습니다.이 모드에서는 WCF 구현이 http 처리기에서 관리되므로 ASP.NET 파이프 라인에서도 처리됩니다. 서비스가 HTTP 지원 만 필요하다고 생각한다면 호환 모드에서 서비스를 호스팅하여 ASP.NET 파이프 라인의 기능과 유연성에 액세스 할 수 있습니다.

통합 및 클래식 파이프 라인 모드의 경우 통합 모드에서 ASP.NET은 w3wp.exe에 의해 IIS 처리 파이프 라인의 통합 된 부분으로 실행됩니다. 즉, 파이프 라인에 연결 한 사용자 지정 처리기 등 (예 : PHP와 같은 비 -ASP.NET 콘텐츠를 제공하는 경우라도)을 사용하여로드 된 후 동일한 AppDomain에서 실행됩니다.

클래식 모드에서 ASP.NET은 소유자 작업자 프로세스 인 aspnet_wp.exe에서 실행되며 IIS 처리 파이프 라인에 ISAPI 필터로 연결됩니다. 나는 AppDomain 사용법과 동일한 기계가 여기에도 적용됩니다.