2011-01-06 30 views
8

WCF RESTサービスで問題が発生しました。私は得る:'System.ServiceModel.Activation.HttpHandler'タイプを読み込めませんでしたWCF RESTとバージョン競合

'System.ServiceModel.Activation.HttpHandler' 'System.ServiceModel、Version = 3.0.0.0、Culture =ニュートラル、PublicKeyToken = b77a5c561934e089'アセンブリから読み込むことができませんでした。

ASP.NET 4.0 AppPoolでIISを実行しているとき。それが正常に動作する何の問題 - ASP.NET Comaptibilityはカッシーニに動作していない

を有効にすると

  • IIS
  • の内部で実行されている

    • 問題が場合にのみ発生するようです。 ASP.NETとの互換性をオフにして実行しても問題ありません。

      ハンドラのバージョンが競合していて、古いバージョンのSystem.ServiceModelを読み込もうとする間違ったバージョンのハンドラをインスタンス化しようとしているようですが、これをトレースできませんでした。

      これまでにこのようなことが分かったことがありますか?これをさらに追跡する方法はありますか?

      System.ServiceModelとHttpHandlerの参照についてはApplicationHost.configファイルとマスターweb.configファイルを調べましたが、運はありません。そこ。

      +++予想通りリック---

    +0

    私も、まさにこの問題に実行しているし、それを回避する方法を見つけることができません。 web.configの* .svcで使用しているハンドラを共有できますか? IIS7を統合モードで実行しているとしますか? –

    答えて

    8

    はこれがApplicationHost.configのではデフォルトのハンドラマッピングでバージョン管理の競合であることが判明。具体的には、IISはASP.NET 2.0とASP.NET 4.0のサービスアクティベーションハンドラ(およびモジュール)への特定の参照のマッピングを持ち、2.0の参照はバージョン固有の事前条件によって制限されませんでした。

    <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私は(のApplicationHost.configのシステムルートに)変更しなければならなかった上記の問題を解決するには

    。 runtimeVersion4.0の同じセクションに* .svcマップが追加され、適切なランタイムが起動されます。

    Microsoftによると、ランタイムバージョンを適切に登録していない古いツール(Azureツールを推測していますか?)がインストールされている場合、この状況が発生する可能性があります。

    問題を解決しました。

    +0

    ありがとう!サーバー間のバージョン管理を簡単にするために、.NET 4.0 WebアプリケーションのWeb.configをセクションのと変更し、同じ作業を行ったばかりです。 –

    11

    Visual Studio 2010コマンドプロンプトを起動するか、「C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319」を参照してください。これは、最新の.NETバージョンを登録します

    -iru

    Aspnet_regiis.exeに:そして、コマンドプロンプトから次のコマンドを実行します。また、あなたのアプリケーションプールが最新バージョンの.netを実行していることを確認してください。

    +0

    ありがとう、それは問題を解決した – user1135594

    5

    上記のすべてがうまくいかない場合はもう1つの方法があります。私たちは、あなたがアセンブリをV.4.0するために追加のハンドラマッピングする必要があり、上記の回答で与えられるよう、最新のフレームワークを登録した後

    をIIS 7.5.7600

    したWindows Server 2008 R2 SP1を使用していた(ストレンジ)

    手動で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

    関連する問題