Не удалось загрузить тип 'System.ServiceModel.Activation.HttpHandler' Конфликт версий с WCF REST - PullRequest
9 голосов
/ 07 января 2011

Я столкнулся с проблемой со службой REST WCF. Я получаю:

Не удалось загрузить тип 'System.ServiceModel.Activation.HttpHandler' из сборки 'System.ServiceModel, версия = 3.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089'.

при работе внутри IIS в ASP.NET 4.0 AppPool.

Проблема возникает, только если:

  • Бег внутри IIS
  • Когда включена совместимость ASP.NET

Запуск в Кассини - нет проблем, он работает правильно. Запуск с отключенной совместимостью с ASP.NET - без проблем работает.

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

Кто-нибудь видел что-то подобное раньше и есть идеи, как отследить это дальше?

Я посмотрел в ApplicationHost.config и основных файлах web.config ссылки на System.ServiceModel и HttpHandler, но не повезло. Там.

+++ Рик ---

Ответы [ 3 ]

11 голосов
/ 08 ноября 2011

запустите командную строку Visual Studio 2010 или перейдите к «C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319».И выполните следующую команду из командной строки:

aspnet_regiis.exe -iru

Это зарегистрирует последнюю версию .net.Также убедитесь, что в вашем пуле приложений установлена ​​последняя версия .net

.
8 голосов
/ 07 января 2011

Так что, как и ожидалось, это оказалось конфликтом версий в отображениях обработчиков по умолчанию в ApplicationHost.config. В частности, в IIS есть сопоставления для конкретных ссылок ASP.NET 2.0 и ASP.NET 4.0 на обработчик (и модуль) активации службы, и ссылки 2.0 не были ограничены специфическим предварительным условием версии.

Чтобы исправить вышеуказанную проблему, мне пришлось изменить (в корне системы в ApplicationHost.config):

<add name="svc-Integrated" path="*.svc" verb="*" 
type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089" 
preCondition="integratedMode" />

до:

<add name="svc-Integrated" path="*.svc" verb="*"
type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
preCondition="integratedMode,runtimeVersionv2.0" />

Обратите внимание на EXPLICIT runtimeVersion2.0. В том же разделе есть дополнительные карты * .svc для runtimeVersion4.0, которые затем запускают соответствующие среды выполнения.

По мнению Microsoft, такая ситуация может возникнуть, если установлены более старые инструменты (я полагаю, инструменты Azure ???), которые не регистрируют версию времени выполнения должным образом.

Проблема решена.

5 голосов
/ 05 июля 2016

Есть еще один способ, если все вышеперечисленное не работает.(Странно)

Мы использовали Windows Server 2008 R2 SP1 с IIS 7.5.7600

После регистрации последней платформы, как указано в ответе выше,

Вам необходимо добавить обработчик добавлениясопоставление сборки v.4.0 вручную с web.config и удаление «ServiceModel» из модулей.

    <system.webServer>
        <handlers>
            <remove name="svc-Integrated" />
            <add name=".svc" verb="*" path="*.svc" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, 
System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        </handlers>
        <modules>
            <remove name="ServiceModel" />
        </modules>
    </system.webServer>

Подробнее здесь

...