无法加载类型'System.ServiceModel.Activation.HttpHandler'与WCF REST的版本冲突

Ric*_*ahl 9 asp.net wcf wcf-rest

我遇到了WCF REST服务的问题.我明白了:

无法从程序集'System.ServiceModel,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'加载类型'System.ServiceModel.Activation.HttpHandler'.

在ASP.NET 4.0 AppPool中运行IIS时.

只有在以下情况下才会出现问题:

  • 在IIS内部运行
  • 启用ASP.NET Comaptibility时

在卡西尼号中运行 - 没问题,它可以正常运行.与ASP.NET兼容性运行 - 没问题,它的工作原理.

它似乎是某种处理程序版本冲突试图实例化错误版本的处理程序,而该处理程序反过来试图加载旧版本的System.ServiceModel,但我无法追踪它.

任何人之前都看过这样的事情并有任何想法如何进一步追踪这个?

我查看了ApplicationHost.config和System.ServiceModel和HttpHandler引用的主web.config文件,但没有运气.那里.

+++瑞克---

Sri*_*ake 11

启动Visual Studio 2010命令提示符或浏览到"C:\ Windows\Microsoft.NET\Framework\v4.0.30319".并从命令提示符运行以下命令:

aspnet_regiis.exe -iru

这将注册最新的.net版本.还要确保您的应用池正在运行最新版本的.net


Ric*_*ahl 8

正如预期的那样,这在ApplicationHost.config中的默认处理程序映射中是一个版本控制冲突.特别是IIS具有ASP.NET 2.0和ASP.NET 4.0对服务激活处理程序(和模块)的特定引用的映射,2.0引用不受特定于版本的前提条件的限制.

要解决上述问题,我必须更改(在ApplicationHost.config中的System root):

<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" />
Run Code Online (Sandbox Code Playgroud)

至:

<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" />
Run Code Online (Sandbox Code Playgroud)

请注意EXPLICIT runtimeVersion2.0.在runtimeVersion4.0的同一部分中还有其他*.svc映射,然后激活相应的运行时.

根据Microsoft的说法,当安装了一些没有正确注册运行时版本的旧工具(我猜测Azure工具???)时会出现这种情况.

问题解决了.


Ami*_*itd 5

如果以上所有方法都不起作用,还有一种方法.(奇怪)

我们使用的是带有IIS 7.5.7600的Windows Server 2008 R2 SP1

注册上述答案后给出的最新框架,

您需要手动将添加处理程序映射到v.4.0程序集到web.config并从Modules中删除"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>
Run Code Online (Sandbox Code Playgroud)

更多这里