Почему мне нужно настроить aspNetCompatibilityEnabled дважды?

Может кто-нибудь объяснить, почему при создании веб-службы WCF, в которой вы хотите использовать HttpContext.Current.Items вам нужно добавить код в 2 местах? Один в самом веб-сервисе ([AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]) и один в файле web.config (<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />)?

У моего коллеги только что все его вызовы веб-службы потерпели неудачу. У него пропала настройка web.config и спросил, почему. Я пытался объяснить, но я не уверен, что смог:)

Я думаю, что это связано с разделением кода веб-сервиса и местом, где размещается веб-сервис. Сам веб-сервис говорит, что ему нужен этот режим совместимости. Затем также необходимо настроить среду хостинга, чтобы сказать, что она должна работать в этом режиме совместимости. Разве это не главное? У него все еще оставался вопрос: "но если служба использует этот атрибут, разве это не должно быть автоматически?"

1 ответ

Решение

Первый сообщает WCF, что aspcompat должен быть включен, а второй включает его. Вы должны быть в состоянии обойтись без первого.

Это заставляет человека, настраивающего службу WCF, использовать правильную конфигурацию.

MS разработал это с идеей, что человек, настраивающий сервис, может быть кем-то другим, чем человек, который сделал это.

Чтобы ответить на его последний вопрос. Когда вы добавляете атрибуты к своей службе, вы не настраиваете хост, вы требуете, как хост должен быть настроен. Настройка происходит на хосте.

Другие вопросы по тегам