簡體   English   中英

“ System.Web.Extensions”在IIS7上部署.Net Framework 4網站的麻煩

[英]'System.Web.Extensions' trouble deploying .Net Framework 4 Website on IIS7

我正在嘗試在IIS7服務器上部署.Net Framework 4網站。 我已經將應用程序池的目標框架更改為.Net 4,但是該應用程序仍向我顯示錯誤:

“無法讀取配置節'system.web.extensions',因為它缺少節聲明”

我猜想這與.Net4的新功能有關,該功能使我擁有一個緊湊的Web配置文件。 我認為出於某些原因,IIS7對此不滿意。

我該怎么做才能成功部署此應用程序,或者我必須縮小到v3.5? 我確定那里有解決方案。

你有什么建議嗎?

如果您在IIS 7(.5)中創建新網站,也可能會遇到同樣的錯誤,因為它為新網站創建的應用程序池可能仍設置為2.0,因此system.web.extensions無效在2.0配置文件中。

只需進入IIS管理器,選擇應用程序池,為您的應用程序選擇一個,右鍵單擊“高級設置”,然后將.NET Framework版本設置為v4。

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

該錯誤是由於將此system.web.extensions部分添加到Web.config

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

經過一番狩獵(發生!),我可以自己解決此問題。

顯然與配置文件的結構無關,它是ASP.Net Ajax的程序集,它沒有部署在我的目標服務器上,但可能存在於我的開發機上。

我從web.config文件中刪除了該條目,此問題已解決,還有其他一些小問題,但值得一提。

IIS7 + .Net Framework 4的部署經驗並不難,並且增加的功能將是值得的。

如果"aspnet_regiis.exe -iru"沒有幫助,並且您確定嘗試在.NET 4.0應用程序池下啟動網站,則可能是IIS 7.0的配置繼承中的問題。 Web服務器讀取.NET 2.0的machine.config。 應用修補程序KB958854將解決配置繼承問題。 我已經通過這種方式成功解決了我的問題。

我從Leo Tang帖子中找到了答案:

此問題不是由web.config遷移引起的。 如果將應用程序更新為.Net Framework4.0,但是將此應用程序分配給在.Net Framework3.5或更早版本下運行的應用程序池,則會遇到此錯誤。 您可以將此應用程序分配給IIS中的.Net Framework4.0應用程序池以解決問題。

因此,如果您讀取錯誤,則無法讀取配置節'system.web.extensions',因為它缺少節聲明,這是因為已部署的應用程序正在配置為在.NET 2.0或3.5下運行的應用程序池下運行( DefaultAppPool?默認情況下,DefaultAppPool設置為.NET 2.0。

執行以下步驟:

  1. 運行IISexec'inetmgr'
  2. 選擇您的應用程序 (可能是左側面板樹中的“服務器\\站點\\默認網站\\您的應用程序名稱”
  3. 打開您的應用程序設置 (從右側面板的“操作”中單擊“基本設置” ),然后查看“ 應用程序池”

  4. 現在,選擇最適合您的操作:

    • 您可以更改應用程序的應用程序池 (在“應用程序編輯”表單中選擇按鈕,然后選擇“ ASP.NET v4-0 Classic” )。 此更改將僅影響此應用程序
    • 或者,您可以編輯應用程序池 (可能是左側樹中的Server \\ Application pools \\ DefaultAppPool )並將其設置為在.NET Framevork v4.0下運行。 請注意: 此更改將影響此應用程序池下的每個應用程序 ……這是您想要的嗎? 也許...

這是因為您已將應用程序部署到IIS服務器上,其中該應用程序的AppPool設置為在DefaultAppPool下運行。 DefaultAppPool自動配置為在.NET 2.0而不是.NET 4.0下運行。 這意味着System.Web.Extensions東西對於該版本的.NET Framework不可用。

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

重新運行您的應用程序,它應該可以工作。

檢查此鏈接以進行圖形演示。

我通過以下步驟解決了該問題:1.將應用程序池框架設置為4.0
2.如果第1點不起作用,則問題可能與配置繼承有關。 http://support.microsoft.com/kb/958854應用修補程序

這應該可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM