WCF размещается в веб-приложении и режиме эмуляции

Мне разместили сервис WCF в веб-приложении (IIS). Я должен выставить 1 конечную точку wsHttp и другой netTcp. Я нахожусь на среде IIS7, которая позволяет мне разместить не основанные на HTTP сервисы. Так или иначе, когда я просматриваю.svc файл с помощью браузера, я получаю ошибку:

Сервис не может быть активирован, потому что он не поддерживает совместимость ASP.NET. совместимость ASP.NET включена для этого приложения

Путем поиска с помощью Google я понял, что WCF работает в двух режимах - Смешанный и совместимый ASP.NET. Когда я применяю атрибут

[AspNetCompatibilityRequirements(
       RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

Однако кажется, что, после того как я применяю этот атрибут к реализации Контракта на Обслуживание, я не могу использовать не HTTP-связывание.

Как делают я настроил его так, чтобы:

  • Я могу поддерживать не Конечные точки HTTP
  • Я могу разместить сервис на веб-приложение
  • Я не создаю многочисленные услуги один с aspnet включенной совместимостью и другой выключенный
13
задан Yuck 27 October 2011 в 12:15
поделиться

3 ответа

Полагаю, у вас включен параметр совместимости с ASP.NET для вашего приложения IIS. Эта ссылка, похоже, связана с этим.

Я бы посоветовал вам отключить режим совместимости ASP.NET. Я запускал конечные точки net.tcp и basicHttp из одного и того же приложения в IIS без проблем.

edit: Это изменение конфигурации, которое вам нужно сделать / проверить (из предоставленной ссылки). Значение должно быть изменено с 'false' на 'true'.

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” />
</system.serviceModel>
4
ответ дан 2 December 2019 в 00:58
поделиться

Попробуйте установить для параметра multipleSiteBindingsEnabled значение true в ServiceHostingEnvironment. Я не являюсь экспертом в WCF, но после рассмотрения вопроса и прочтения множества сайтов я думаю, что это будет иметь смысл, поскольку вы используете конечные точки служб TCP и HTTP.

Надеюсь, это поможет.

1
ответ дан 2 December 2019 в 00:58
поделиться

Здесь довольно много всего происходит. Прежде всего, если вы на самом деле не используете конкретную функцию ASP.net, вам НЕ следует использовать режим совместимости. Чтобы отключить это, следуйте совету Кирка, а также удалите эту строку из своего кода:

[AspNetCompatibilityRequirements(
       RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Режим совместимости не требуется только для размещения службы HTTP, это только в том случае, если вы хотите использовать функции ASP.net, которых нет в WCF (или необходимо перенести старую службу asmx в WCF без изменения другого кода).

Вторая проблема заключается в размещении привязки, отличной от HTTP, с использованием IIS. Это работает только в IIS 7 и только с использованием WAS. Совместимость с ASP.net НЕ будет работать с привязкой, отличной от HTTP, потому что ASP.net требует HTTP.

То, что вы пытаетесь сделать, невозможно, пока включен режим совместимости. Удалите его, и тогда все должно заработать.

7
ответ дан 2 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: