2009-10-27 9 views
6

Używam WCF REST stater kit do budowy zwykłego xml przez usługę HTTP. W ramach tego Im przy użyciu RequestInterceptor do uwierzytelniania. Wewnątrz obiektu RequestInterceptor mam dostęp do obiektu System.ServiceModel.Channels.RequestContext, z którego mogę uzyskać adres URL żądania, querystring params i inne przydatne rzeczy. Nie mogę się dowiedzieć, jak uzyskać dostęp do HttpContext żądania. Mam kilka rzeczy przechowywanych w HttpContext, które chcę uzyskać dostęp wewnątrz requestInterceptor, ale Im stara się dostać do nich. Kiedy używam szybkiego podglądu wewnątrz Visual Studio, widzę, że jest on pochowany w prywatnych elementach requestContext. Czy ktoś może mi pokazać, jak uzyskać dostęp do HttpContext, być może za pomocą refleksji na obiekcie RequestContext?Dostęp do HttpContext w WCF RequestInterceptor

Odpowiedz

9

Możesz uzyskać dostęp do HttpContext środowiska ASP.NET wewnątrz dowolnej usługi WCF hostowanej w środowisku ASP.NET, jeśli tylko włączasz kompatybilność. Odbywa się to w dwóch etapach:

  1. Zastosuj AspNetCompatibilityRequirementsAttribute do klasy usług i ustawić właściwość RequirementsMode z wymaganymi
  2. Upewnij włączyć kompatybilność konfigurując następujące:

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

Po wykonaniu tej czynności można w dowolnym momencie uzyskać dostęp do bieżącej instancji HttpContext, używając the static Current property. Na przykład:

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

Zauważ, że umożliwiając integrację ze środowiskiem wykonawczym ASP.NET ma ponieść jakieś dodatkowe obciążenie dla każdego żądania, jeśli więc nie trzeba go można zaoszczędzić trochę wydajność, nie pozwalając go i tylko przy użyciu Zamiast tego uruchomiono środowisko wykonawcze System.ServiceModel.Web. Masz dostęp do prawie wszystkich informacji, których potrzebujesz, używając klas HttpRequestResponseMessageProperty i HttpResponseMessageProperty.

Aby uzyskać więcej informacji na ten temat, zobacz this section of MSDN titled WCF and ASP.NET.

+0

Mam już na miejscu wszystko, o czym wspomniałeś powyżej. Mam dostęp do HttpContext wewnątrz normalnej metody OperationContract, ale wewnątrz requestInterceptor (http://weblogs.asp.net/gsusx/archive/2008/11/26/extending-restful-services-with-a-ustom-request -interceptor.aspx? CommentPosted = true # commentmessage) –

Powiązane problemy