微軟ASP.NET站點部署指南(12):Troubleshooting
2011-11-25 14:44 湯姆大叔 閱讀(13651) 評論(5) 收藏 舉報這個頁面列出的是Visual Studio 部署ASP.NET 程序時經常出現的問題。對于每個錯誤,都列出了可能出錯的原因和解決方案。
使用SQL Server Compact時,頁面出現Access is Denied
場景
使用SQL Server Compact數據庫部署站點以后,運行頁面出現如下錯誤:
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
產生原因和解決方案
服務器上的NETWORK SERVICE賬戶需要讀取SQL Service Compact原生庫(\amd64或bin\x86目錄)的權限,但沒有讀取該文件夾的權限。查看前面的章節如何給bin目錄授權(確保子目錄也有相同的權限)。
因權限不夠不能讀取配置文件
場景
使用Visual Studio發布按鈕部署程序的時候,Output窗口出現如下錯誤信息:
An error occurred when reading the IIS Configuration File 'MACHINE/REDIRECTION'. The identity performing this operation was ... Error: Cannot read configuration file due to insufficient permissions.
產生原因和解決方案
使用one-click發布,必須使用管理員身份運行Visual Studio。關閉Visual Studio,以管理員身份重新運行Visual Studio。
不能連接到目標服務器
場景
使用Visual Studio發布按鈕部署程序的時候,Output窗口出現如下錯誤信息:
Web deployment task failed.(Could not connect to the destination computer ("<server URL>") using the specified process
("The Web Management Service"). This can happen if a proxy server is interrupting communication with the destination server.
Disable the proxy server and try again.) ... The remote server returned an error: (502) Bad Gateway.
產生原因和解決方案
有可能是代理服務器問題,解決方法:打開控制面板或者Internet選項,選擇連接選項卡,在Internet屬性對話框里點擊局域網設置,在局域網(LAN)設置對話框里在取消自動檢測設置。然后重新發布。
如果問題依舊,聯系你的管理員看看關于代理和防火墻可以做什么修改,因為Web Deploy為Web Management Service使用不標準的端口(8172),其它的連接Web Deploy 使用的是80端口。部署到第三方主機的時候一般使用的是Web Management Service。
默認.Net應用程序池不存在
場景
部署.NET Framework 4程序的時候,出現如下錯誤信息:
The default .NET 4.0 application pool does not exist or the application could not be added. Please verify that ASP.NET 4.0 is installed on this machine.
產生原因和解決方案
IIS上沒有安裝ASP.NET4,如果部署的服務器是你的開發機(安裝了VS2010),ASP.NET4已經安裝在服務器上了,但是沒有安裝在IIS上。要想成功部署,需要在Command Prompt窗口里運行如下命令在IIS里安裝ASP.NET4:
cd %windir%\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe –iru
你還要為默認應用程序池設置.NET framework版本,具體步驟請參考第5章。
Format of the initialization string does not conform to specification starting at index 0
場景
使用one-click發布以后,訪問頁面(需要讀取數據庫)的時候出現如下錯誤:
Format of the initialization string does not conform to specification starting at index 0.
產生原因和解決方案
打開部署站點的Web.config文件,看看數據庫連接字符串是不是以$(ReplacableToken_開頭,像下面這樣:
<connectionStrings>
<add name="DefaultConnection" connectionString="$(ReplacableToken_DefaultConnection-Web.config Connection String_0)" providerName="System.Data.SqlServerCe.4.0"/>
<add name="SchoolContext" connectionString="$(ReplacableToken_SchoolContext-Web.config Connection String_0)" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
如果是和上面一樣,需要編輯項目文件,在PropertyGroup里添加如下屬性:
<AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings>
然后重新部署
HTTP 500.21 Internal Server Error
場景
運行部署以后的站點,出現如下錯誤信息:
HTTP Error 500.21 - Internal Server Error. Handler "PageHandlerFactory-Integrated" has a bad module "ManagedPipelineHandler" in its module list.
產生原因和解決方案
程序需要ASP.NET4,但是IIS上沒有注冊ASP.NET4,注冊ASP.NET4請在Command Prompt里運行如下代碼:
cd %windir%\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe –iru
你還要為默認應用程序池設置.NET framework版本,具體步驟請參考第5章。
不能打開App_Data目錄下的SQL Server Express數據庫
場景
為連接App_Data目錄下的SQL Server Express數據庫(.mdf文件),Web.config設置了連接字符串,第一次運行程序的時候出現如下錯誤:
System.Data.SqlClient.SqlException: Cannot open database "DatabaseName" requested by the login. The login failed.
產生原因和解決方案
在服務器上找不到任何叫該名稱的SQL Server Express數據庫(即便是以前刪過同名的文件了,也不行),解決方案是給這個.mdf文件重命名一個從來沒用過的名字,然后修改Web.config文件里的連接字符串。
Model Compatibility Cannot be Checked
場景
為連接App_Data目錄下的SQL Server Express數據庫(.mdf文件),Web.config設置了連接字符串,第一次運行程序的時候出現如下錯誤:
Model compatibility cannot be checked because the database does not contain model metadata. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions.
產生原因和解決方案
現有的數據庫名字,曾經在本機存在,里面可能有表和數據,如果你有SQL Server Management Studio (SSMS)的話,可以通過它來刪除,如果沒有請問你的數據庫取一個沒用過的名字,然后修改Web.config文件里的連接字符串。
創建User和Role的時候出現SQL Error
場景
支持該腳本的時候失敗,出現如下錯誤:
The approximate location of the error was between lines '1' and '3' of the script.
The verbose log may have more information about the error. The command started with:
CREATE USER [user2] FOR LOGIN [user2] WITH DEFAULT
Error: User does not have permission to perform this action.
產生原因和解決方案
運行SQL腳本的賬戶沒有權限,一般提供商會給db_datareader, db_datawriter和 db_ddladmin角色,雖然可以創建大部分數據庫對象,但是不能創建User和Role。要避免這個問題需要在數據庫自動生成腳本的ProSource元素里添加如下屬性:
CopyAllUsers=false, CopyAllRoles=false
如何編輯項目文件里的PreSource元素。請參看:Edit Deployment Settings in the Project File。如果你開發庫里的User和Role需要部署在目標庫,請聯系你的提供商。
部署運行自定義腳本的時候出現SQL超時錯誤
場景
運行自定義腳本的時候出現超時錯誤:
產生原因和解決方案
在不同的事務里運行多個腳本的,默認情況下自動生成的腳本在一個事務,但是自定義腳本不在,如果你選擇了Package/Publish SQL選項卡上的Pull data and/or schema from an existing database并且添加自定義SQL腳本的話,你必須在一些腳本上做一些事務的設置。詳細信息請參考: How to: Deploy a Database With a Web Application Project。
Stream Data of Site Manifest Is Not Yet Available
場景
使用deploy.cmd文件在t(Test)選項下安裝package的時候,出現如下錯誤:
Error: The stream data of 'sitemanifest/dbFullSql[@path='C:\TEMP\AdventureWorksGrant.sql']/sqlScript' is not yet available.
產生原因和解決方案
該命令不能產生test report,如果在命令行輸入y選項的話,可能沒問題。注:該錯誤信息只在Test模式下才會出現。
程序需要ManagedRuntimeVersion v4.0
場景
嘗試部署的時候,出現如下錯誤:
The application pool that you are trying to use has the 'managedRuntimeVersion' property set to 'v2.0'. This application requires 'v4.0'.
產生原因和解決方案
IIS上沒有安裝ASP.NET4,如果部署的服務器是你的開發機(安裝了VS2010),ASP.NET4已經安裝在服務器上了,但是沒有安裝在IIS上。要想成功部署,需要在Command Prompt窗口里運行如下命令在IIS里安裝ASP.NET4:
cd %windir%\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe –i
不能轉化Microsoft.Web.Deployment.DeploymentProviderOptions
場景
部署一個package的時候,出現如下錯誤:
Unable to cast object of type 'Microsoft.Web.Deployment.DeploymentProviderOptions' to 'Microsoft.Web.Deployment.DeploymentProviderOptions'.
產生原因和解決方案
當你從IIS Manager 使用Web Deploy 1.1 UI 部署,但是Web Deploy 2.0也在上面安裝了。如果使用IIS Remote Administration Tool來導入部署一個package,連接以后檢查New Features Available對話框。(對話框有可能只在第一次連接的時候出現,想每次都出現,請關閉IIS Manager,通過inetmgr /reset重新開啟)。如果Web Deploy UI里有一個Feature的版本號小于8的話,部署的服務器上可能同時都安裝了Web Deploy 1.1和2.0版,如果客戶端使用的版本是2.0的話,那服務器上也應該只安裝Web Deploy 2.0。你可以聯系提供商解決這個問題。
不能加載SQL Server Compact組件
場景
運行部署后的站點時,出現如下錯誤:
Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8482. Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.
產生原因和解決方案
Bin目錄下沒有包含原生程序集的amd64和x86子目錄, On a computer that has 如果電腦上安裝SQL Server Compact 的話,那原生程序集是存放在C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Private 目錄的。最好的解決辦法是在Visual Studio里安裝NuGet SqlServerCompact包,該package有一個腳本可以復制原生程序集到amd64和x86子目錄。當然,你也可以手工復制。更多信息,請參考第2章節。
這個頁面列出的是Visual Studio 部署ASP.NET 程序時經常出現的問題。對于每個錯誤,都列出了可能出錯的原因和解決方案。如果大家遇到問題請到該頁面查找錯誤原因。
浙公網安備 33010602011771號