2009-10-27 8 views
6

WCF REST stater kit을 사용하여 일반 xml HTTP 서비스를 작성하고 있습니다. 이 Im의 일환으로 RequestInterceptor를 사용하여 인증을 수행합니다. RequestInterceptor 내부에서 System.ServiceModel.Channels.RequestContext 객체에 대한 액세스 권한을 가지며이 url, querystring 매개 변수 및 기타 유용한 정보를 얻을 수 있습니다. 내가 해결할 수없는 것은 요청의 HttpContext에 액세스하는 방법입니다. 나는 requestInterceptor 내부에서 액세스하고자하는 HttpContext에 저장되어있는 몇 가지 것들을 가지고 있지만 그들에게 다가 가기 위해 고심하고있다. Visual Studio에서 quickwatch를 사용할 때 requestContext의 private 멤버 안에 묻혀 있음을 알 수 있습니다. 누군가가 HttpContext에 액세스하는 방법을 보여줄 수 있습니까? 아마도 RequestContext 객체의 리플렉션을 사용하고 있을까요?WCF RequestInterceptor에서 HttpContext에 액세스

답변

9

호환성을 켜는 한 ASP.NET에서 호스팅되는 모든 WCF 서비스에서 ASP.NET의 HttpContext에 액세스 할 수 있습니다. 이 작업은 두 단계로 수행됩니다

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” /> 
</system.serviceModel> 
:

  1. 다음과 같은 구성하여 호환성을 수 있는지 확인 필수

  2. 에 RequirementsMode 속성을 서비스 클래스에 AspNetCompatibilityRequirementsAttribute를 적용하고 설정

    이 작업을 완료하면 the static Current property을 사용하여 언제든지 현재 HttpContext 인스턴스에 액세스 할 수 있습니다. 예를 들면 :

    foreach(HttpCookie cookie in HttpContext.Current.Request.Cookies) 
    { 
        /* ... */ 
    } 
    

    당신이 필요하지 않은 경우 당신이 그것을 가능하게 단지를 사용하지 않음으로써 어떤 성능을 절약 할 수 있도록 ASP.NET 런타임과의 통합을 가능하게하는 것은, 각 요청에 대해 몇 가지 추가 오버 헤드가 발생 않습니다 대신 System.ServiceModel.Web 런타임. HttpRequestResponseMessagePropertyHttpResponseMessageProperty 클래스를 사용하여 필요한 모든 정보에 거의 액세스 할 수 있습니다.

    제목에 대한 자세한 내용은 this section of MSDN titled WCF and ASP.NET을 참조하십시오.

+0

나는 이미 위에서 언급 한 모든 것을 갖추고 있습니다. 정상적인 OperationContract 메서드 내부에서 HttpContext에 액세스 할 수 있지만 requestInterceptor (http://weblogs.asp.net/gsusx/archive/2008/11/26/extending-restful-services-with-a-custom-request) 내부에서 액세스 할 수 있습니다. -interceptor.aspx? CommentPosted = true # commentmessage) –