Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 无法加载类型';System.ServiceModel.Activation.HttpHandler';版本与WCF REST冲突_Asp.net_Wcf_Wcf Rest - Fatal编程技术网

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

Asp.net 无法加载类型';System.ServiceModel.Activation.HttpHandler';版本与WCF REST冲突,asp.net,wcf,wcf-rest,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应用程序池中的IIS内部运行时 只有在以下情况下,问题才会出现: 在IIS内部运行 启用ASP.NET可兼容性时 在卡西尼号上运行-没问题,它工作

我遇到了WCF REST服务的问题。我得到:

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

在ASP.NET 4.0应用程序池中的IIS内部运行时

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

  • 在IIS内部运行
  • 启用ASP.NET可兼容性时
在卡西尼号上运行-没问题,它工作正常。在关闭ASP.NET兼容性的情况下运行-没问题,它可以工作

似乎是某种类型的处理程序版本冲突试图实例化错误版本的处理程序,而错误版本的处理程序又试图加载较旧版本的System.ServiceModel,但我一直无法找到这一点

有没有人以前见过类似的情况,有没有办法进一步追踪

我在ApplicationHost.config和master web.config文件中查找了System.ServiceModel和HttpHandler引用,但没有找到。在那里


+++Rick---

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

要解决上述问题,我必须更改(在ApplicationHost.config的系统根目录下):


致:


请注意显式runtimeVersion2.0。runtimeVersion4.0的同一部分中还有其他*.svc映射,这些映射将触发相应的运行时

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


问题已解决。

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

aspnet_regiis.exe-iru


这将注册最新的.net版本。另外,请确保您的应用程序池运行的是最新版本的.net。如果以上所有操作都不起作用,还有一种方法。(奇怪)

我们将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>


谢谢!为了简化跨服务器的版本管理,我刚刚将.NET 4.0 web应用程序的web.config更改为该部分中的,这做了同样的工作。我也遇到了这个问题,无法找到解决方法。能否在web.config中共享用于*.svc的处理程序?我猜你在综合模式下运行IIS7?
<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" />
    <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>