.NET Framework 4 で実行されている IIS 内の .NET Framework 3.5 で作成された WCF サービスをホストする方法
.NET Framework Version 4 を実行するコンピューターで .NET Framework Version 3.5 を使用して作成された Windows Communication Foundation (WCF) サービスをホストすると、次のテキストで ProtocolException が返される場合があります。
ハンドルされていない例外: System.ServiceModel.ProtocolException: 応答メッセージのコンテンツの種類 text/html; charset=utf-8 が、バインド (application/soap+xml; charset=utf-8) のコンテンツの種類と一致しません。カスタム エンコーダーを使用している場合は、IsContentTypeSupported メソッドが正しく実装されていることを確認してください。応答の先頭の 1024 バイトは '<html> <head> <title>' でした。アプリケーション ドメインまたはアプリケーション プールは、現在、バージョン 4 以降の .NET Framework を実行しています。この Web アプリケーションの IIS 設定が 4.0 以降に設定されている場合、または ASP.NET Web 開発サーバーのバージョン 4.0 以降を使用している場合に、この状況が発生することがあります。この Web アプリケーションの Web.config ファイル内の <compilation> 要素に、このバージョンの .NET Framework に必要な targetFrameworkMoniker 属性が含まれていません (<compilation targetFrameworkMoniker=".NETFramework,Version=v4.0">, など)。この属性を使用して Web.config ファイルを更新するか、別のバージョンの .NET Framework を使用するように Web アプリケーションを構成します。</title>...
または、サービスの .svc ファイルを参照する際に、次のテキストのエラー ページが表示される場合があります。
アプリケーション ドメインまたはアプリケーション プールは、現在、.NET Framework のバージョン 4 以降を実行しています。この Web アプリケーションの IIS 設定が 4.0 以降に設定されている場合、または ASP.NET Web 開発サーバーのバージョン 4.0 以降を使用している場合に、この状況が発生することがあります。この Web アプリケーションの Web.config ファイル内の <compilation> 要素に、このバージョンの .NET Framework に必要な targetFrameworkMoniker 属性が含まれていません ('<compilation targetFrameworkMoniker=".NETFramework,Version=v4.0">' など)。この属性を使用して Web.config ファイルを更新するか、別のバージョンの .NET Framework を使用するように Web アプリケーションを構成します。
これらのエラーは、IIS が実行されているアプリケーション ドメインが .NET Framework 4 を実行していて、WCF サービスが .NET Framework 3.5 で実行されるように構成されている場合に発生します。このトピックでは、このサービスを実行するために必要な変更について説明します。
次に、<compilers> 要素を検索し、CompilerVersion プロバイダー オプションの値を 4.0 に変更します。既定では、2 つの <compiler> 要素が <compilers> 要素にあります。次の例に示すように、両方の CompilerVersion プロバイダー オプションを更新する必要があります。
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4"
type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="OptionInfer" value="true"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
必要な targetFramework 属性の追加
サービスの Web.config ファイルを開き、<compilation> 要素を探します。
次の例に示すように、targetFramework 属性を <compilation> 要素に追加します。
<compilation debug="false" targetFramework="4.0"> <assemblies> <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> </assemblies> </compilation>
<compilers> 要素を検索し、CompilerVersion プロバイダー オプションの値を 4.0 に変更します。既定では、2 つの <compiler> 要素が <compilers> 要素にあります。次の例に示すように、両方の CompilerVersion プロバイダー オプションを更新する必要があります。
<system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <providerOption name="CompilerVersion" value="v3.5"/> <providerOption name="WarnAsError" value="false"/> </compiler> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <providerOption name="CompilerVersion" value="v3.5"/> <providerOption name="OptionInfer" value="true"/> <providerOption name="WarnAsError" value="false"/> </compiler> </compilers> </system.codedom>