다음을 통해 공유


WCF 서비스 및 ASP.NET

이 항목에서는 WCF(Windows Communication Foundation) 서비스를 ASP.NET 함께 호스팅하고 ASP.NET 호환성 모드에서 호스팅하는 것을 설명합니다.

ASP.NET 함께 WCF 호스팅

IIS(인터넷 정보 서비스)에서 호스팅되는 WCF 서비스는 단일 공통 애플리케이션 도메인 내에서 ASPX 페이지 및 ASMX 웹 서비스와 함께 배치될 수 있습니다. ASP.NET WCF 및 ASP.NET HTTP 런타임 모두에 대해 AppDomain 관리 및 동적 컴파일과 같은 일반적인 인프라 서비스를 제공합니다. WCF의 기본 구성은 ASP.NET 함께 사용됩니다.

WCF 서비스 및 ASP .NET: 공유 상태를 보여 주는 스크린샷

ASP.NET HTTP 런타임은 ASP.NET 요청을 처리하지만 이러한 서비스가 ASP.NET 콘텐츠와 동일한 AppDomain에서 호스트되더라도 WCF 서비스로 향하는 요청 처리에는 참여하지 않습니다. 대신 WCF 서비스 모델은 WCF 서비스에 주소가 지정된 메시지를 가로채 WCF 전송/채널 스택을 통해 라우팅합니다.

병렬 모델의 결과는 다음과 같습니다.

  • ASP.NET 및 WCF 서비스는 AppDomain 상태를 공유할 수 있습니다. 두 프레임워크가 동일한 AppDomain에서 공존할 수 있으므로 WCF는 ASP.NET(정적 변수, 이벤트 등)와 AppDomain 상태를 공유할 수도 있습니다.

  • WCF 서비스는 호스팅 환경 및 전송과 관계없이 일관되게 작동합니다. ASP.NET HTTP 런타임은 의도적으로 IIS/ASP.NET 호스팅 환경 및 HTTP 통신에 결합됩니다. 반대로, WCF는 호스팅 환경(WCF는 IIS 내부 및 외부에서 일관되게 동작) 및 전송 간에 일관되게 동작하도록 설계되었습니다(IIS 7.0 이상에서 호스트되는 서비스는 해당 엔드포인트 중 일부가 HTTP 이외의 프로토콜을 사용하더라도 노출하는 모든 엔드포인트에서 일관된 동작을 갖습니다).

  • AppDomain 내에서 HTTP 런타임에 의해 구현된 기능은 ASP.NET 콘텐츠에는 적용되지만 WCF에는 적용되지 않습니다. ASP.NET 애플리케이션 플랫폼의 많은 HTTP 관련 기능은 ASP.NET 콘텐츠가 포함된 AppDomain 내에서 호스트되는 WCF 서비스에는 적용되지 않습니다. 이러한 기능의 예는 다음과 같습니다.

    • HttpContext: WCF 서비스 내에서 액세스할 때 항상 Currentnull입니다. RequestContext를 대신 사용하세요.

    • 파일 기반 권한 부여: WCF 보안 모델은 서비스 요청이 승인되었는지 여부를 결정할 때 서비스의 .svc 파일에 적용되는 ACL(액세스 제어 목록)을 허용하지 않습니다.

    • 구성 기반 URL 권한 부여: 마찬가지로 WCF 보안 모델은 System.Web의 <권한 부여 구성 요소에 지정된 URL 기반 권한 부여> 규칙을 준수하지 않습니다. 서비스가 ASP.NET의 URL 권한 부여 규칙에 의해 보호되는 URL 공간에 있는 경우 이러한 설정은 WCF 요청에 대해 무시됩니다.

    • HttpModule 확장성: WCF 호스팅 인프라는 이벤트가 발생할 때 PostAuthenticateRequest WCF 요청을 가로채고 ASP.NET HTTP 파이프라인으로 처리를 반환하지 않습니다. 파이프라인의 이후 단계에서 요청을 가로채도록 코딩된 모듈은 WCF 요청을 가로채지 않습니다.

    • ASP.NET 권한 대행: 기본적으로 WCF 요청은 ASP.NET이 System.Web의 <identity impersonate="true" /> 구성 옵션으로 권한 대행을 활성화하도록 설정된 경우에도 항상 IIS 프로세스 ID로 실행됩니다.

이러한 제한은 IIS 애플리케이션에서 호스트되는 WCF 서비스에만 적용됩니다. ASP.NET 콘텐츠의 동작은 WCF의 존재에 의해 영향을 받지 않습니다.

일반적으로 HTTP 파이프라인에서 제공하는 기능이 필요한 WCF 애플리케이션은 호스트 및 전송에 독립적인 WCF 등가물 사용을 고려해야 합니다.

또는 WCF의 ASP.NET 호환 모드에서 서비스를 실행하는 것이 좋습니다.

ASP.NET 호환성 모드에서 WCF 서비스 호스팅

WCF 모델은 호스팅 환경 및 전송에서 일관되게 작동하도록 설계되었지만 애플리케이션에 이러한 수준의 유연성이 필요하지 않은 경우가 많습니다. WCF의 ASP.NET 호환성 모드는 IIS 외부에서 호스트하거나 HTTP 이외의 프로토콜을 통해 통신할 필요가 없지만 ASP.NET 웹 애플리케이션 플랫폼의 모든 기능을 사용하는 시나리오에 적합합니다.

WCF 호스팅 인프라가 WCF 메시지를 가로채 HTTP 파이프라인에서 라우팅하는 기본 병렬 구성과 달리 ASP.NET 호환성 모드에서 실행되는 WCF 서비스는 ASP.NET HTTP 요청 수명 주기에 완전히 참여합니다. 호환 모드에서 WCF 서비스는 ASPX 페이지 및 ASMX 웹 서비스에 대한 요청이 처리되는 방식과 유사하게 구현을 통해 IHttpHandler HTTP 파이프라인을 사용합니다. 따라서 WCF는 다음 ASP.NET 기능과 관련하여 ASMX와 동일하게 작동합니다.

  • HttpContext: ASP.NET 호환성 모드에서 실행되는 WCF 서비스는 Current 및 그와 관련된 상태에 액세스할 수 있습니다.

  • 파일 기반 권한 부여: ASP.NET 호환 모드에서 실행되는 WCF 서비스는 서비스의 .svc 파일에 파일 시스템 ACL(액세스 제어 목록)을 연결하여 보호할 수 있습니다.

  • 구성 가능한 URL 권한 부여: WCF 서비스가 ASP.NET 호환 모드에서 실행되는 경우 WCF 요청에 ASP.NET의 URL 권한 부여 규칙이 적용됩니다.

  • HttpModuleCollection 확장성: ASP.NET 호환성 모드에서 실행되는 WCF 서비스는 ASP.NET HTTP 요청 수명 주기에 완전히 참여하므로 HTTP 파이프라인에 구성된 모든 HTTP 모듈은 서비스 호출 전후에 WCF 요청에서 작동할 수 있습니다.

  • ASP.NET 가장: WCF 서비스는 ASP.NET 가장된 스레드의 현재 ID를 사용하여 실행되며, 애플리케이션에 ASP.NET 가장을 사용하도록 설정한 경우 IIS 프로세스 ID와 다를 수 있습니다. ASP.NET 가장 및 WCF 가장이 모두 특정 서비스 작업에 사용하도록 설정된 경우 서비스 구현은 궁극적으로 WCF에서 가져온 ID를 사용하여 실행됩니다.

WCF의 ASP.NET 호환 모드는 애플리케이션의 Web.config 파일에 있는 다음 구성을 통해 애플리케이션 수준에서 사용하도록 설정됩니다.

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

이 값은 false 지정되지 않은 경우 기본값으로 설정됩니다. 값 false 은 애플리케이션에서 실행되는 모든 WCF 서비스가 ASP.NET 호환성 모드에서 실행되지 않음을 나타냅니다.

ASP.NET 호환성 모드는 WCF 기본값과 근본적으로 다른 요청 처리 의미 체계를 의미하므로 개별 서비스 구현은 ASP.NET 호환성 모드가 설정된 애플리케이션 내에서 실행되는지 여부를 제어할 수 있습니다. 서비스는 이 기능을 사용하여 AspNetCompatibilityRequirementsAttribute ASP.NET 호환 모드를 지원하는지 여부를 나타낼 수 있습니다. 이 특성의 기본값은 .입니다 Allowed.

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CalculatorService : ICalculatorSession
{//Implement calculator service methods.}

다음 표에서는 애플리케이션 전체 호환성 모드 설정이 개별 서비스의 명시된 지원 수준과 상호 작용하는 방법을 보여 줍니다.

애플리케이션 전체 호환 모드 설정 [AspNetCompatibilityRequirementsMode (ASP.NET 호환 요구 사항 모드)]

설정
관찰된 결과
aspNetCompatibilityEnabled = "true" Required 서비스가 성공적으로 활성화됩니다.
aspNetCompatibilityEnabled = "true" Allowed 서비스가 성공적으로 활성화됩니다.
aspNetCompatibilityEnabled = "true" NotAllowed 서비스에서 메시지를 받을 때 활성화 오류가 발생합니다.
aspNetCompatibilityEnabled = "false" Required 서비스에서 메시지를 받을 때 활성화 오류가 발생합니다.
aspNetCompatibilityEnabled = "false" Allowed 서비스가 성공적으로 활성화됩니다.
aspNetCompatibilityEnabled = "false" NotAllowed 서비스가 성공적으로 활성화됩니다.

비고

IIS 7.0 및 WAS를 사용하면 WCF 서비스가 HTTP 이외의 프로토콜을 통해 통신할 수 있습니다. 그러나 ASP.NET 호환성 모드를 사용하도록 설정한 애플리케이션에서 실행되는 WCF 서비스는 HTTP가 아닌 엔드포인트를 노출할 수 없습니다. 이러한 구성은 서비스에서 첫 번째 메시지를 받을 때 활성화 예외를 생성합니다.

WCF 서비스에 ASP.NET 호환 모드를 사용하도록 설정하는 방법에 대한 자세한 내용은 AspNetCompatibilityRequirementsMode 샘플을 참조 하세요.

참고하십시오