Мне разместили сервис WCF в веб-приложении (IIS). Я должен выставить 1 конечную точку wsHttp
и другой netTcp
. Я нахожусь на среде IIS7, которая позволяет мне разместить не основанные на HTTP сервисы. Так или иначе, когда я просматриваю.svc
файл с помощью браузера, я получаю ошибку:
Сервис не может быть активирован, потому что он не поддерживает совместимость ASP.NET. совместимость ASP.NET включена для этого приложения
Путем поиска с помощью Google я понял, что WCF работает в двух режимах - Смешанный и совместимый ASP.NET. Когда я применяю атрибут
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
Однако кажется, что, после того как я применяю этот атрибут к реализации Контракта на Обслуживание, я не могу использовать не HTTP-связывание.
Как делают я настроил его так, чтобы:
Полагаю, у вас включен параметр совместимости с ASP.NET для вашего приложения IIS. Эта ссылка, похоже, связана с этим.
Я бы посоветовал вам отключить режим совместимости ASP.NET. Я запускал конечные точки net.tcp и basicHttp из одного и того же приложения в IIS без проблем.
edit: Это изменение конфигурации, которое вам нужно сделать / проверить (из предоставленной ссылки). Значение должно быть изменено с 'false' на 'true'.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled=”true” />
</system.serviceModel>
Попробуйте установить для параметра multipleSiteBindingsEnabled значение true в ServiceHostingEnvironment. Я не являюсь экспертом в WCF, но после рассмотрения вопроса и прочтения множества сайтов я думаю, что это будет иметь смысл, поскольку вы используете конечные точки служб TCP и HTTP.
Надеюсь, это поможет.
Здесь довольно много всего происходит. Прежде всего, если вы на самом деле не используете конкретную функцию ASP.net, вам НЕ следует использовать режим совместимости. Чтобы отключить это, следуйте совету Кирка, а также удалите эту строку из своего кода:
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
Режим совместимости не требуется только для размещения службы HTTP, это только в том случае, если вы хотите использовать функции ASP.net, которых нет в WCF (или необходимо перенести старую службу asmx в WCF без изменения другого кода).
Вторая проблема заключается в размещении привязки, отличной от HTTP, с использованием IIS. Это работает только в IIS 7 и только с использованием WAS. Совместимость с ASP.net НЕ будет работать с привязкой, отличной от HTTP, потому что ASP.net требует HTTP.
То, что вы пытаетесь сделать, невозможно, пока включен режим совместимости. Удалите его, и тогда все должно заработать.