Как правило, для WCF предпочтительным решением является использование активации для каждого вызова, например, каждый новый запрос / вызов получает новый экземпляр класса обслуживания, и все необходимые шаги, такие как аутентификация и авторизация, выполняются для каждого запроса.
Это может показаться неэффективным, но веб-приложения и, в частности, веб-службы, должны быть по возможности полностью без сохранения состояния. Помещение вещи в «пакет состояния» просто вызывает проблемы в будущем - как вы узнаете, когда аннулировать эту кэшированную копию учетных данных? Что, если у пользователя есть ваше приложение, но cookie остается на его компьютере?
В общем, я настоятельно рекомендую попытаться привыкнуть к идее делать эти шаги каждый раз. Да, это стоит немного времени на обработку - но, с другой стороны, вы можете уберечь себя от большого количества неприятностей с точки зрения управления состоянием в неотъемлемой среде без сохранения состояния - всегда клочья, независимо от того, как вы на это смотрите .. ..
Если вы все еще настаиваете на этом клудже, вы можете включить режим ASP.NET «compabitility» для WCF, который должен дать вам доступ к HttpContext - но опять-таки: я настоятельно рекомендую против этого. Первое и наиболее очевидное ограничение заключается в том, что этот режим совместимости с ASP.NET, конечно, работает только при размещении службы WCF в IIS, чего я бы предпочел не делать в рабочем коде.
Чтобы включить режим совместимости ASP.NET, используйте этот параметр в web.config:
<system.serviceModel>
<serviceHostingEnvironment
aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
и вам нужно украсить реализацию сервиса (класс, реализующий сервисный контракт) соответствующим атрибутом:
[AspNetCompatibilityRequirements(RequirementsMode=
AspNetCompatibilityRequirementsMode.Allowed)]
class YourService : IYourService
AspNetCompatibilityRequirementsMode
может быть NotAllowed
, Allowed
или Required
.
Для получения дополнительной информации и более подробного объяснения см. Сообщение в блоге Вэньлонга Донга о Режим совместимости ASP.NET