Vorgehensweise: Hosten eines WCF-Diensts, der mit .NET Framework 3.5 unter IIS geschrieben wurde und unter .NET Framework 4 ausgeführt wirdHow to: Host a WCF Service Written with .NET Framework 3.5 in IIS Running Under .NET Framework 4

Wenn ein Windows Communication Foundation (WCF)-Dienst mit geschriebene gehostet .NET Framework Version 3.5.NET Framework version 3.5 auf einem Computer mit .NET Framework Version 4.NET Framework version 4, erhalten Sie möglicherweise eine ProtocolException mit dem folgenden Text.When hosting a Windows Communication Foundation (WCF) service written with .NET Framework Version 3.5.NET Framework version 3.5 on a machine running .NET Framework Version 4.NET Framework version 4, you may get a ProtocolException with the following text.

Unhandled Exception: System.ServiceModel.ProtocolException: The content type text/html; charset=utf-8 of the response message does not match the content type of the binding (application/soap+xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were: '<html>    <head>        <title>The application domain or application pool is currently running version 4.0 or later of the .NET Framework. This can occur if IIS settings have been set to 4.0 or later for this Web application, or if you are using version 4.0 or later of the ASP.NET Web Development Server. The <compilation> element in the Web.config file for this Web application does not contain the required'targetFrameworkMoniker' attribute for this version of the .NET Framework (for example, '<compilation targetFrameworkMoniker=".NETFramework,Version=v4.0">'). Update the Web.config file with this attribute, or configure the Web application to use a different version of the .NET Framework.</title>...  

Oder wenn Sie versuchen, auf die SVC-Datei des Diensts zuzugreifen, wird ggf. eine Fehlerseite mit dem folgenden Text angezeigt.Or if you try to browse to the service's .svc file you may see an error page with the following text.

The application domain or application pool is currently running version 4.0 or later of the .NET Framework. This can occur if IIS settings have been set to 4.0 or later for this Web application, or if you are using version 4.0 or later of the ASP.NET Web Development Server. The <compilation> element in the Web.config file for this Web application does not contain the required 'targetFrameworkMoniker' attribute for this version of the .NET Framework (for example, '<compilation targetFrameworkMoniker=".NETFramework,Version=v4.0">'). Update the Web.config file with this attribute, or configure the Web application to use a different version of the .NET Framework.  

Diese Fehler treten auf, weil die Anwendungsdomänen, unter denen IIS ausgeführt wird, .NET Framework 4.NET Framework 4 ausführen. Der WCF-Dienst erwartet jedoch die Ausführung unter .NET Framework 3,5.NET Framework 3.5.These errors occur because the application domain IIS is running within is running .NET Framework 4.NET Framework 4 and the WCF service is expecting to run under .NET Framework 3,5.NET Framework 3.5. In diesem Thema werden die Änderungen erläutert, die für die Ausführung des Diensts erforderlich sind.This topic explains the modifications required to get the service to run.

Suchen Sie als Nächstes die <compilers>-Element und ändern Sie die Option der CompilerVersion-Anbieter von 4.0 Wert haben muss.Next find the <compilers> element and change the CompilerVersion provider option to have a value of 4.0. Standardmäßig sind zwei <compiler> Elemente unter dem <compilers> Element.By default, there are two <compiler> elements under the <compilers> element. Sie müssen die Option für den CompilerVersion-Anbieter für beide Elemente aktualisieren. Dies wird im folgenden Beispiel veranschaulichen.You must update the CompilerVersion provider option for both as shown in the following example.

<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>  

Hinzufügen des erforderlichen targetFramework-AttributsAdd the required targetFramework attribute

  1. Öffnen Sie die Datei "Web.config", und suchen Sie nach dem <compilation> Element.Open the service's Web.config file and look for the <compilation> element.

  2. Hinzufügen der targetFramework -Attribut auf die <compilation>-Element wie im folgenden Beispiel gezeigt.Add the targetFramework attribute to the <compilation> element as shown in the following example.

    <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>  
    
  3. Suchen der <compilers>-Element und ändern Sie die Option der CompilerVersion-Anbieter von 4.0 Wert haben muss.Find the <compilers> element and change the CompilerVersion provider option to have a value of 4.0. Standardmäßig sind zwei <compiler> Elemente unter dem <compilers> Element.By default, there are two <compiler> elements under the <compilers> element. Sie müssen die Option für den CompilerVersion-Anbieter für beide Elemente aktualisieren. Dies wird im folgenden Beispiel veranschaulichen.You must update the CompilerVersion provider option for both as shown in the following example.

    <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>