2009-10-27 2 views
6

Я использую WCF REST stater kit для создания простой службы xml через HTTP. Как часть этого Im, используя RequestInterceptor для аутентификации. Внутри RequestInterceptor у меня есть доступ к объекту System.ServiceModel.Channels.RequestContext, из которого я могу получить URL-адрес запроса, параметры запроса и другие полезные вещи. Я не могу решить, как получить доступ к HttpContext запроса. У меня есть несколько вещей, хранящихся в HttpContext, которые я хочу получить внутри requestInterceptor, но Im изо всех сил пытается добраться до них. Когда я использую quickwatch внутри Visual Studio, я вижу, что он там похоронен внутри частных членов requestContext. Может ли кто-нибудь показать мне, как получить доступ к HttpContext, возможно, используя отражение объекта RequestContext?Доступ к HttpContext внутри WCF RequestInterceptor

ответ

9

Вы можете обращаться к HttpContext ASP.NET внутри любой службы WCF, размещенной в ASP.NET, до тех пор, пока вы включаете совместимость. Это делается в два этапа:

  1. Примените AspNetCompatibilityRequirementsAttribute к классу обслуживания и установить свойство RequirementsMode на Требуется
  2. Убедитесь, что вы включить совместимость настроив следующее:

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

Как только вы это сделаете, вы можете в любой момент получить доступ к текущему экземпляру HttpContext с помощью the static Current property. Например:

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

Обратите внимание, что при включении интеграции со средой выполнения ASP.NET делает на себя дополнительную нагрузку для каждого запроса, так что если вам не нужна вы можете сэкономить производительность, не позволяя ему и только с помощью System.ServiceModel.Web. У вас есть доступ ко всей необходимой информации, используя классы HttpRequestResponseMessageProperty и HttpResponseMessageProperty.

Для получения дополнительной информации по этому вопросу см. this section of MSDN titled WCF and ASP.NET.

+0

У меня уже есть все, что вы упомянули выше. Я могу получить доступ к HttpContext внутри обычного метода OperationContract, но внутри requestInterceptor (http://weblogs.asp.net/gsusx/archive/2008/11/26/extending-restful-services-with-a-custom-request -interceptor.aspx? CommentPosted = истина # commentmessage) –

Смежные вопросы