web-dev-qa-db-ja.com

「System.Web.Extensions」がIIS7に.NetFramework 4Webサイトをデプロイする際の問題

IIS7サーバーに.NetFramework 4Webサイトを展開しようとしています。アプリケーションプールのターゲットフレームワークを.Net4に変更しましたが、アプリにエラーが表示されます。

"構成セクション 'system.web.extensions'は、セクション宣言がないため読み取ることができません"

これは、コンパクトなWeb構成ファイルを作成できる.Net4の新機能と関係があると思います。どういうわけかIIS7はこれに満足していないと思います。

このアプリを正常にデプロイするにはどうすればよいですか、それともv3.5にスケールバックする必要がありますか?私はそこに解決策があると確信しています。

何か提案はありますか?

20
Cyril Gupta

IIS 7(.5)で新しいWebサイトを作成すると、新しいサイト用に作成されるアプリケーションプールが発生する可能性があるため、これとまったく同じエラーが発生する可能性があります。まだ2.0に設定されているため、system.web.extensionsは2.0構成ファイルでは無効です。

IIS Managerに移動し、アプリケーションプールを選択し、アプリ用のプールを選択して、右クリックし、[詳細設定]をクリックして、.NETFrameworkのバージョンをv4に設定します。

30
Module  IIS Web Core
Notification    BeginRequest
Handler Not yet determined
Error Code  0x80070032
Config Error    The configuration section 'system.web.extensions' cannot be read because it is missing a section declaration 
Config File \\web.config

エラーはWeb.configに追加されたこのsystem.web.extensionsセクションが原因です

<system.web.extensions>
<scripting>
<webServices>
<!-- Uncomment this line to customize maxJsonLength and add a custom converter
   <jsonSerialization maxJsonLength="1024000">
-->
</webServices>
<scriptResourceHandler enableCompression="true" enableCaching="true"/>
</scripting>
</system.web.extensions>

何らかの理由でそのセクションを追加すると、system.web.extensionsグループがオーバーライドされます。解決策は

  1. 不要な場合は、上記のコードにコメントを付けてください。
  2. 以下のコードをWeb.configセクショングループに追加します

..

<sectionGroup name="system.web.extensions"         type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
        <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
        <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
        <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
    </sectionGroup>
</sectionGroup>
</sectionGroup>
10

何回か探し回った後、私はこの問題を自分で解決することができました(起こります!)。

どうやら構成ファイルの構造とは何の関係もありません。ターゲットサーバーにデプロイされていないが、開発マシンに存在する可能性のあるASP.NetAjaxのアセンブリです。

Web.configファイルからエントリを削除したところ、この問題は解決されました。他にも小さな問題がいくつかありましたが、言及する価値はありません。

IIS7 + .Net Framework 4の展開エクスペリエンスはそれほど難しくなく、追加された機能はそれだけの価値があります。

4
Cyril Gupta

"aspnet_regiis.exe -iru"が役に立たず、.NET 4.0アプリプールでサイトを起動しようとしていることが確実な場合は、IIS7.0。Webサーバーの構成の継承に問題がある可能性があります。 .NET 2.0のmachine.configを読み取ります。修正プログラムを適用すると KB958854 構成の継承に関する問題が解決します。この方法で、問題を正常に修正しました。

3
SmaGMan

Leo Tang post から答えを見つけました:

この問題は、web.configの移行が原因ではありません。アプリケーションを.NetFramework4.0に更新したが、このアプリケーションを.Net Framework3.5以前のバージョンで実行されているアプリケーションプールに割り当てると、このエラーが発生します。 このアプリケーションをIISの.NetFramework4.0アプリケーションプールに割り当てて問題を修正できます。

したがって、エラーを読み取った場合セクション宣言がないため構成セクション 'system.web.extensions'を読み取ることができませんデプロイしたアプリケーションが実行するように構成されたアプリケーションプールで実行されているためです.NET 2.0または3.5(DefaultAppPool?DefaultAppPoolはデフォルトで.NET 2.0に設定されています)。

次の手順を実行します。

  1. 実行[〜#〜] iis [〜#〜](exec 'inetmgr'
  2. アプリケーションを選択します(おそらく'Server\Sites\Default web site\Your application name'左側のパネルのツリーから)
  3. アプリケーション設定を開きます('基本設定'から'アクション'右パネルをクリックします) アプリケーションプールを見てください。

  4. 次に、ニーズに最適なアクションを選択します。

    • アプリケーションのアプリケーションプールを変更できます(ボタンselect in 'Application Edit' form 、次に'ASP.NET v4-0 Classic')を選択します。 この変更はこのアプリケーションにのみ影響します
    • または、アプリケーションプールを編集して(おそらくServer\Application pools\DefaultAppPool左側のツリーから)設定して設定することもできます.NET Framevorkv4.0で実行します。注意:この変更は、このアプリケーションプールの下のすべてのアプリケーションに影響します...これはあなたが望むものですか?多分...
3
Emanuele Greco

これは、アプリケーションをIISサーバーにデプロイし、アプリケーションのAppPoolがDefaultAppPoolで実行するように設定されているためです。DefaultAppPoolは、.NET4.0ではなく.NET2.0で実行するように自動的に構成されます。これは、System.Web.Extensionsのものがそのバージョンの.NETFrameworkで使用できないことを意味します。

Webアプリケーションのアプリケーションプール(AppPool)設定を変更するには

1. Select the application directory 
2. Under Actions, click Basic Settings…
3. Change the Application Pool to ASP.NET v4.0 (or another .NET 4.0 app pool) by clicking on the Select… button.
4. Click OK

アプリケーションを再実行すると、機能するはずです。

グラフィカルなデモンストレーションについては、 このリンク を確認してください。

2
Jayesh

以下の手順で問題を解決しました。1。アプリケーションプールフレームワークを4.0に設定します。
2。ポイント1が機能しない場合、問題は構成の継承に関連している可能性があります。 http://support.Microsoft.com/kb/958854 から修正プログラムを適用します

これで問題が解決するはずです。

1
bart