2011-01-06 37 views
8

我遇到了WCF REST服務的問題。我得到:無法加載類型'System.ServiceModel.Activation.HttpHandler'與WCF REST的版本衝突

無法從程序集'System.ServiceModel,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'加載類型'System.ServiceModel.Activation.HttpHandler'。

在ASP.NET 4.0 AppPool中的IIS內運行時。

這個問題似乎只發生,如果:

  • 當ASP.NET Comaptibility啓用

在卡西尼運行IIS

  • 內部運行的 - 沒問題它工作正常。與ASP.NET兼容性運行關閉 - 沒有問題,它的工作原理。

    它似乎是某種處理程序版本衝突,試圖實例化處理程序的錯誤版本,而該版本的處理程序又嘗試加載較早版本的System.ServiceModel,但我無法追查到它。

    以前有人看過類似的東西,並有任何想法如何進一步追蹤此?

    我看過ApplicationHost.config和System.ServiceModel和HttpHandler引用的主Web.config文件,但沒有運氣。那裏。

    +++裏克---

  • +0

    我運行到這個確切的問題太多,並不能找到辦法解決它。你可以在web.config中分享你在* .svc中使用的處理程序嗎?我假設你在集成模式下運行IIS7? – 2012-12-01 23:09:18

    回答

    8

    所以預期這竟然是在對ApplicationHost.config默認的處理程序映射版本化衝突。具體而言,IIS具有用於ASP.NET 2.0和ASP.NET 4.0的特定於服務激活處理程序(和模塊)的引用的映射,2.0引用不受特定於版本的preCondition的限制。

    要解決上述問題,我不得不改變(在對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" /> 
    

    注意明確runtimeVersion2.0。在runtimeVersion4.0的同一節中還有另外的* .svc映射,然後觸發適當的運行時。

    根據微軟的說法,當一些較老的工具(我猜Azure工具?)被安裝,沒有正確註冊運行時版本時,可能會出現這種情況。

    問題解決。

    +0

    謝謝!爲了簡化跨服務器管理版本,我只是將我的.NET 4.0 Web應用程序的Web.config更改爲部分中的,並完成了相同的工作。 – 2012-05-07 21:33:22

    11

    啓動Visual Studio 2010命令提示符或瀏覽至「C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319」。從命令提示符下運行以下命令:

    ASPNET_REGIIS.EXE -iru

    這將註冊最新的.NET版本。另外,請確保您的應用程序池運行最新版本的.net

    +0

    謝謝,它解決了這個問題 – user1135594 2013-10-04 12:32:35

    5

    如果上述所有方法都不起作用,還有一種方法。(怪)

    我們使用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> 
    

    更多here