Доступ к HttpContext внутри WCF RequestInterceptor - PullRequest
6 голосов
/ 27 октября 2009

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

1 Ответ

9 голосов
/ 27 октября 2009

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

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

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

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

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

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

Дополнительные сведения по этому вопросу см. В этом разделе MSDN под названием WCF и ASP.NET .

.
...