9

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 互換性が有効になっている場合

Cassini での実行 - 問題なく正常に動作します。ASP.NET 互換性をオフにして実行 - 問題なく動作します。

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

誰かが以前にこのようなものを見たことがあり、これをさらに追跡する方法について何か考えがありますか?

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

+++ リック ---

4

3 に答える 3

11

Visual Studio 2010 コマンド プロンプトを起動するか、「C:\Windows\Microsoft.NET\Framework\ v4.0.30319」を参照します。そして、コマンド プロンプトから次のコマンドを実行します。

aspnet_regiis.exe -iru

これにより、最新の .net バージョンが登録されます。また、アプリ プールが最新バージョンの .net を実行していることを確認してください

于 2011-11-08T17:25:15.880 に答える
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" />

EXPLICIT runtimeVersion2.0 に注意してください。同じセクションに、runtimeVersion4.0 の追加の *.svc マップがあり、適切なランタイムを起動します。

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

問題が解決しました。

于 2011-01-06T22:37:56.270 に答える