WCF, размещенный в веб-приложении и режиме совместимости - PullRequest
13 голосов
/ 04 марта 2010

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

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

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

[AspNetCompatibilityRequirements(
       RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

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

Как мне настроить это так:

  • Я могу поддерживать не HTTP конечные точки
  • Я могу разместить службу в веб-приложении
  • Я не создаю несколько служб, одна с включенной совместимостью aspnet, а другая отключена

Ответы [ 4 ]

7 голосов
/ 25 марта 2010

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

[AspNetCompatibilityRequirements(
       RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

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

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

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

4 голосов
/ 08 марта 2010

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

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

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

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” />
</system.serviceModel>
1 голос
/ 17 марта 2010

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

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

0 голосов
/ 15 июня 2017

Я тоже столкнулся с этой проблемой.
это стало результатом переноса некоторого нового кода, который ссылался на пространство имен System.Web, но фактически не требовал его, в существующий проект WCF. удаление тех, которые используют операторы, решило проблему для меня.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...