2009-10-27 25 views
6

HTTP hizmeti üzerinden düz bir xml oluşturmak için WCF REST stater kit kullanıyorum. Bunun bir parçası olarak kimlik doğrulaması yapmak için bir RequestInterceptor kullanıyorum. RequestInterceptor'ın içinde, istek URL'sini, querystring paramlarını ve diğer yararlı şeyleri alabileceğim bir System.ServiceModel.Channels.RequestContext nesnesine erişimim var. Çalışamadığım şey, isteğin HttpContext dosyasına nasıl erişileceğidir. Ben requestInterceptor içine erişmek istediğim HttpContext içinde saklanan birkaç şey var ama onlara ulaşmak için mücadele ediyorum. QuickWatch'u Visual Studio'da kullandığımda, requestContext'in özel üyeleri içinde gömülü olduğunu görebiliyorum. Birisi bana belki de RequestContext nesnesinde yansıma kullanarak HttpContext'e nasıl erişilebileceğini gösterir mi?WCF RequestInterceptor İçinde HttpContext Erişimi

cevap

9

ASP.NET'in HttpContext ürününü, uyumluluk açık olduğu sürece ASP.NET'te barındırılan herhangi bir WCF hizmetine erişebilirsiniz. Bu iki adımda yapılır:

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

  1. aşağıdaki yapılandırarak uyumluluğunu sağlamak emin olun Gerekli

  2. için RequirementsMode özelliğini servis sınıfına AspNetCompatibilityRequirementsAttribute uygulayın ve set

    Bunu yaptıktan sonra, geçerli HttpContext örneğine the static Current property kullanarak istediğiniz zaman erişebilirsiniz. Örneğin:

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

    İhtiyacınız yoksa bunu mümkün kılan ve sadece kullanmayarak bazı performans kaydedebilmek için ASP.NET çalışma zamanı ile entegrasyon sağlayan her istek için bazı ek yükü tabi olmadığını Not System.ServiceModel.Web çalışma zamanı yerine. HttpRequestResponseMessageProperty ve HttpResponseMessageProperty sınıflarını kullanarak ihtiyacınız olan bilgilerin tamamına erişebilirsiniz.

    Konu hakkında daha fazla bilgi için, bkz. this section of MSDN titled WCF and ASP.NET.

+0

Yukarıda bahsettiğiniz herşeyi zaten yapmışım. HttpContext'e normal bir OperationContract yöntemine ancak bir requestInterceptor içinde erişebiliyorum (http://weblogs.asp.net/gsusx/archive/2008/11/26/extending-restful-services-with-a-custom-request -interceptor.aspx? CommentPosted = true # commentmessage) –