2011-01-06 23 views
8

me he encontrado un problema con WCF servicio REST. Obtengo:No se pudo cargar el tipo de conflictos Versión 'System.ServiceModel.Activation.HttpHandler' con WCF REST

No se pudo cargar el tipo 'System.ServiceModel.Activation.HttpHandler' desde el ensamblado 'System.ServiceModel, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'.

cuando se ejecuta dentro del IIS en un ASP.NET 4.0 AppPool.

El problema parece ocurrir sólo si:

  • se ejecuta dentro de IIS
  • Cuando ASP.NET se habilita Comaptibility

Correr en Cassini - no hay problema de que funciona correctamente. Funcionando con la compatibilidad de ASP.NET desactivada, no hay problema, funciona.

Parece que hay algún tipo de conflicto en la versión del controlador al tratar de crear una versión incorrecta del controlador que a su vez intenta cargar una versión anterior de System.ServiceModel, pero no he podido rastrearlo.

Alguien ha visto algo como esto antes y tienen alguna idea de cómo realizar un seguimiento de este abajo más lejos?

He mirado en ApplicationHost.config y los archivos web.config maestros para System.ServiceModel y HttpHandler referencias, pero sin suerte. Ahí.

+++ Rick ---

+0

estoy corriendo en este problema exacto también, y no puedo encontrar una manera de evitarlo. ¿Puede compartir su controlador que está utilizando para * .svc en web.config? ¿Supongo que está ejecutando IIS7 en modo integrado? –

Respuesta

8

Así como se esperaba esto resultó ser un conflicto de versiones en las asignaciones de controlador por defecto en ApplicationHost.config. Específicamente IIS tiene asignaciones para ASP.NET 2.0 y ASP.NET 4.0 referencias específicas al controlador de activación de servicio (y módulo) y las referencias 2.0 no estaban restringidas por una condición previa específica versión.

Para solucionar el problema anterior que tenía que cambiar (en la raíz del sistema en 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" /> 

a:

<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" /> 

Nota del runtimeVersion2.0 explícito. Hay mapas * .svc adicionales en la misma sección para runtimeVersion4.0 que luego activan los tiempos de ejecución apropiados.

Según Microsoft, esta situación puede surgir cuando se instalan algunas herramientas más antiguas (supongo que las herramientas de Azure ???) que no registran la versión de tiempo de ejecución correctamente.

Problema resuelto.

+0

¡Gracias! Para simplificar la administración de versiones en todos los servidores, acabo de cambiar el Web.config de mi aplicación .NET 4.0 para decir en la sección , y eso hizo el mismo trabajo. –

11

encienda su Símbolo del sistema de Visual Studio 2010 o busque "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319". Y ejecute el siguiente comando desde el símbolo del sistema:

aspnet_regiis.exe -iru

Esto registrará última versión .NET. También asegúrese de que el grupo de aplicación se está ejecutando la última versión de .NET

+0

Gracias, resolvió el problema – user1135594

5

Hay una manera más si todo lo anterior no funciona.(Extraño)

Estábamos usando Windows Server 2008 R2 SP1 con IIS 7.5.7600

Después de registrar último marco como se da en respuesta anterior,

Es necesario que la asignación de controlador añadir a v.4.0 ensamblaje manualmente a web.config y elimine "ServiceModel" de los Módulos.

<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> 

Más here

Cuestiones relacionadas