簡體   English   中英

IIS 運行失敗 ASP.NET 核心站點- HTTP 錯誤502.5

[英]IIS fails to run ASP.NET Core site - HTTP Error 502.5

我們有一台 Windows 2012 R2 機器。 我有一個現有的 ASP.NET Core 站點,該站點正在運行一個已發布的 ASP.NET Core 站點。

但是,當我在進行更改一個月后的今天再次發布到該網站時,我無法再訪問該網站並在我的瀏覽器中出現以下錯誤

HTTP 錯誤 502.5 - 進程失敗

如需更多信息,請訪問: http://go.microsoft.com/fwlink/?LinkID=808681

如果我登錄到服務器並單擊部署目錄中的 exe,它會打開一個命令提示符並在端口 5000 上顯示我的站點。如果我訪問http://localhost:5000上的站點,它會完美運行,所以問題是使用 IIS 而不是網站本身。

如果我登錄到服務器,我可以在 Windows EventViewer 中看到以下內容

在此處輸入圖像描述

具有物理根目錄“D:\Sites\MySite\”的應用程序“MACHINE/WEBROOT/APPHOST/DEFAULT WEB SITE/MySite”無法使用命令行“%LAUNCHER_PATH%”%LAUNCHER_ARGS%'啟動進程,錯誤代碼 =“0x80070002:0”。

當我訪問瀏覽器錯誤消息中的鏈接時,它提到重新安裝我所做的 .net Core Hosting 捆綁包。 但是瀏覽器中的錯誤消息是相同的。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore requestTimeout="02:00:00" processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
  </system.webServer>
</configuration>

當我查看我的應用程序日志文件夾時,每次它嘗試訪問該站點時都會創建一個 stdout 文件,但每次它的大小為 0KB 且內容為空。

為什么 IIS 突然拒絕在它以前工作的地方工作,但如果我直接訪問編譯的 exe,應用程序可以工作?

您的問題是錯誤的 web.config 文件:

<aspNetCore requestTimeout="02:00:00" 
     processPath="%LAUNCHER_PATH%" 
     arguments="%LAUNCHER_ARGS%" 
     stdoutLogEnabled="true" 
     stdoutLogFile=".\logs\stdout" 
     forwardWindowsAuthToken="false" />

路徑 %LAUNCHER_PATH% 在您的系統上不存在,它甚至無效。 它應該是這樣的:

<aspNetCore requestTimeout="02:00:00" 
     processPath=".\yourAppName.exe" 
     arguments="somePossibleArgument" 
     stdoutLogEnabled="true" 
     stdoutLogFile=".\logs\stdout" 
     forwardWindowsAuthToken="false" />

請注意,如果從命令行啟動應用程序,則 web.config 文件將被完全忽略,這就是您未收到錯誤消息的原因。

我遇到了同樣的問題,我的問題是 IIS 無法獲得 dotnet 的路徑。 我能夠通過指定 dotnet.exe 的路徑來修復它

<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="C:\Program Files\dotnet\dotnet.exe" arguments=".\your-project.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"/>
  </system.webServer>
</configuration>

我的問題是由於我的appsettings.json文件中的轉義序列無效,該進程無法啟動。

我正在使用 dotnet 運行已發​​布的 ASPNET Core 2 web api dll。 通過打開命令提示符並導航到站點文件所在的目錄,可以發現該問題。 到達那里后,我運行了命令:

dotnet mySite.dll

(將 mySite.dll 更改為應用程序的主 dll。另外,請確保已安裝正確版本的 .NET Core Windows Server 托管包)。

按回車鍵,它立即崩潰,在控制台窗口中給出錯誤的確切反饋。 如果您遇到類似問題,這是幫助確定啟動錯誤的好方法。

問題:當我部署 asp net core web API 時,processPath 設置為 dotnet。 該應用程序未啟動,事件查看器顯示上述錯誤。

解決方案:

應設置應用程序池標識以加載配置文件。

導航到:應用程序池 -> NetCore(您的池)-> 高級設置 -> 加載用戶配置文件 ----> 將此設置為 true

我驗證轉向 false 重新創建錯誤並設置回 true 解決了它。

我有一個類似的問題。 我只是按照故障排除步驟: Check the system event log for error messages並從事件查看器中找到以下內容, Application 'MACHINE/WEBROOT/APPHOST/[MyFolder]' with physical root 'C:\\inetpub\\wwwroot\\[MyFolder]\\' failed to start process with commandline 'dotnet .\\MyApp.dll', ErrorCode = '0x80004005 : 80008083.

然后我從終端重新運行dotnet .\\MyApp.dll並得到答案:

It was not possible to find any compatible framework version
The specified framework 'Microsoft.AspNetCore.App', version '2.1.1' was not found.
  - Check application dependencies and target a framework version installed at:
      \
  - Alternatively, install the framework version '2.1.1'.

所以原因和jv_回答的一樣,你只是沒有安裝兼容的框架版本。 我最終使用了“自包含”部署模式,它奏效了。

這完全讓我發瘋,因為我已經嘗試了網上找到的所有可能的修復方法,但沒有任何效果對我有用。 直到我發現問題是我的項目名稱中有一個空格:App WebAPI.dll。 因此,當“dotnet .\\App WebAPI.dll”嘗試執行它時會失敗,因為它實際上是在嘗試執行“dotnet .\\App”而忘記了空格后的第二部分。 重命名我的解決方案和項目名稱以刪除空格 (AppWebAPI) 解決了我的問題。 我希望此修復程序可以節省人們試圖找出問題的時間。

我在部署應用程序時遇到了同樣的問題。 我這邊有幾個問題:)

我非常仔細地瀏覽了這個頁面: ASP.NET Core: Publishing to IIS

首先,我沒有安裝.NET Core Windows Server Hosting 包的所有部分。 我最終做了一個依賴於 fremework 的部署,而不是一個獨立的部署。 我們有很多應用程序,不想/不需要每個應用程序都在自己的 .net 核心版本上。 盒子上的 .net 版本太多了。

另外,請注意,如果您的管理員對服務器執行了任何更新/升級,他們可能會提升您的 ASP.NET Core 安裝(請參閱ASP.NET Core:發布到 IIS故障排除部分)

然后,我必須修復我的 web.config...這是我發布的工作 web.config:我沒有發布為 *.exe,我發布的是 *.dll(注意我的參數值)。 此外,我的 processPath 設置為“dotnet”。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\DT.Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
  </system.webServer>
</configuration>

此外,請確保您的 project.json 選項都設置為與您的服務器環境兼容(請參閱ASP.NET Core:發布到 IIS疑難解答部分)

如果有任何幫助,這是我的 project.json 的副本:

{
  "version": "2.0.1.0",

  "dependencies": {
    "DT.Common": "2.*",
    "DT.Configuration": "2.*",
    "DT.Services": "2.*",
    "DT.Web.ViewModels": "2.*",
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.2",
    "Microsoft.AspNetCore.Authentication": "1.1.0",
    "Microsoft.AspNetCore.Authentication.Cookies": "1.1.0",
    "Microsoft.AspNetCore.Authentication.OpenIdConnect": "1.1.0",
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.1.0-preview4-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Routing": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.1.0-preview4-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel.Https": "1.1.0",
    "Microsoft.AspNetCore.Session": "1.0.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0",
    "Microsoft.Extensions.Caching.SqlServer": "1.0.0",
    "Microsoft.Extensions.Configuration.Abstractions": "1.1.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.Extensions.Logging.Debug": "1.1.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.Graph": "1.1.1",
    "Microsoft.IdentityModel.Clients.ActiveDirectory": "3.13.6"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.1.0-preview4-final",
      "imports": "portable-net45+win8+dotnet5.6"
    },
    "Microsoft.Extensions.Caching.SqlConfig.Tools": "1.1.0-preview4-final"
  },

  "frameworks": {
    "netcoreapp1.1": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ],
      "dependencies": {
        "Microsoft.NETCore.App": {
          "version": "1.1.0",
          "type": "platform"
        }
      }
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "views/**/*.cshtml",
      "appsettings.json",
      "appsettings.*.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "bower install", "gulp buildprod" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

我在 Visual Studio 轉換 web.config 文件和更改 processPath 和參數時遇到了同樣的問題。 Microsoft 站點所述,您可以在 project.csproj 文件中添加排除項:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

這解決了我在發布時更改路徑值的問題,但我仍然遇到問題,但是 Visual Studio 在調試時自行更改它。

我的項目在開發中運行良好,但在 web 部署/發布到生產后,它拋出502.5 Process Failure

原因原來是我已經從使用Microsoft.AspNetCore.All 2.0.5更新到2.0.6 恢復版本后工作正常。

對我來說,解決方案只是安裝.Net Core 2.2 SDK並且它起作用了。

我有同樣的問題,除了我在我的開發環境中更新了我的 Visual Studio 並且服務器需要更新 .NetCore 運行時。 一旦我更新了服務器上的運行時,我就可以再次使用。

我想我對 VS 2017 更新缺乏經驗是我的問題;-)

我希望能夠從我的開發目錄中從 IIS 運行我的基於 .Net Core 的 API,而無需與 web.config 文件發生沖突。 Visual Studio 正在根據項目配置文件設置控制 web.config。 你只需要在你的調試開始中添加一個 IIS 配置文件,這樣 VS 就知道如何處理你的 web.config。 說明在這里

現在我可以編寫一點代碼,編譯和刷新瀏覽器,而無需等待瀏覽器啟動,也不會每次都丟失查詢字符串。 單擊 Debug 會自動將 VS 附加到 IIS 以進行調試,這意味着不再需要手動將調試器附加到 w3wp,這是困擾我多年的事情。 完美的!

作為參考,VS 正在將我的 web.config 動態更改為:

<aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
  <environmentVariables />

但是,我不會將其硬編碼到 web.config 中,只是讓 VS 管理它。 :)

對我來說,過了一會兒,我明白這個問題與其中的一個財產有關

appsettings.json

文件。
我有一個名稱為版本的屬性。 格式是這樣的:

"Version": "1.0.6",

在服務器上,我們的支持團隊沒有考慮這種格式,它是這樣的:

"Version": 1.0.6,

和 IIS 面臨 502.5 錯誤。
我可以看到應用程序事件日志,它幫助了我。

當我工作的團隊遇到這個問題時,有人只是用 Visual Studio 構建項目並壓縮 bin 文件夾。

您需要運行 dotnet publish 命令,以便 msbuild 任務將正確構建您的 web.config 文件。 它應該替換 %LAUNCHER_PATH%" 和 "%LAUNCHER_ARGS% 變量。

我遇到了同樣的問題,這個線程中的任何內容都不適合我。 所以我查看了 Windows 事件查看器,發現用戶沒有足夠的權限來創建/修改數據庫,因為我正在使用 EF 核心數據庫遷移。 修復授權解決了這個問題。

因此,我建議檢查您的應用程序事件,希望您能在那里找到錯誤的根本原因。

有時是由於 Assembly name 或 Namespace name 中的 Space

盡量避免空間

轉到項目>>[項目] 屬性>> {應用程序選項卡}更改程序集名稱和默認命名空間名稱,刪除空格!

回應一些用戶提到的應用程序名稱或路徑問題:

我在使用“WebApp-OpenIDConnect-DotNet”示例項目( https://github.com/AzureADQuickStarts/WebApp-OpenIdConnect-DotNet )時遇到了這個問題,它在 IIS Express 中運行良好,但在 IIS 中運行良好。

事實證明,從https://github.com/dotnet/aspnetcore/blob/master/src/Servers/IIS/AspNetCoreModuleV2/CommonLib/HostFxrResolver.cpp深入研究 .NET 源代碼,因為程序集名稱以“-DotNet.exe”(或者可能只是 DotNet.exe),它假設它應該作為一個獨立的應用程序運行。 因此,有關缺少參數的投訴。 在從 Windows 事件日志中搜索錯誤字符串將我帶到源文件之前,我為此糾結了很長時間。

更改程序集名稱使其不以“-DotNet.exe”結尾為我解決了這個問題。

我應該補充一點,我實際上得到的是 500.30 錯誤而不是 500.5。 但是這個線程讓我最接近解決問題,所以我在這里發布我的解決方案。

希望能幫助某人。

哦,伙計們,我的網站也運行良好,突然間它開始顯示此錯誤。 我的網站是在go daddy下托管的。 他們的技術團隊也無能為力找出確切的問題。 我嘗試了上面的所有評論,但沒有一個工作正常。 所以在花了很多時間解決之后,

我在我的 web.config 中保留了 processPath,因為它就像processPath="dotnet"一樣,就在顯示此錯誤之前,我對我的appsettings.json文件進行了一些更改以更新我的連接字符串。 我在本地機器上使用filezilla (使用查看/編輯選項)對其進行了編輯。 所以我猜它可能會損壞,這也導致了這個問題。

所以我所做的是,我再次在本地發布了我的項目,並在我的 appsettings.json 中本地更新了我的連接字符串,並將此最新更改部署到了 Godaddy。 在這次部署之后,我的網站又開始出現了。

在我的情況下,當我克隆了一些非常舊的 git 存儲庫時發生了這個HTTP Error 502.5 ,其中包含面向 .NET Core 1.1 的 Web 項目......前一段時間我從我的 Windows 機器上卸載了 .NET Core 1.1 運行時。

所以我去下載了運行時並重新安裝了它。 這個頁面獲得了最新的 1.1.13:

https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-1.1.13-windows-x64-installer

現在一切都很好。 回去工作。 :-)

我收到了類似的響應,其中包含以下事件查看器系統日志條目:

具有物理根目錄“”的應用程序“/LM/W3SVC/8/ROOT”無法使用命令行“do.net.<assemblyname>.dll”啟動進程並重試多次。 無法綁定到端口“2118”。 從多次重試中捕獲的 stdout 和 stderr 日志的前 30KB 字符:[消息結束]

在將安裝的版本與同時部署的工作服務器進行比較后,我發現系統變量沒有正確更新。

我將以下路徑添加到“Path”環境變量:

  • C:\Program Files\do.net\
  • C:\Program Files (x86)\do.net\

它立即開始工作。

我通過在 web.confing 文件中添加 processPath="C:\Program Files\do.net\do.net.exe" 來解決這個問題。

或者

運行命令 do.net --version 如果您收到類似“do.net”的消息,則無法將其識別為內部或外部命令、可運行程序或批處理文件。

do.net.exe 位於

C:\Program Files\do.net> 如果您使用命令提示符並收到“do.net”未被識別為內部或外部命令、可運行程序或批處理文件的消息,請首先檢查上述路徑。如果您找到上面的路徑然后復制它並將其設置為您PC的環境變量。

腳步:

打開控制面板>系統和安全>系統

點擊高級系統設置

在高級部分,單擊環境變量

在系統變量中,select 路徑並編輯

分號后寫“C:\Program Files\do.net”

單擊確定按鈕直到結束。

現在檢查它是否正常工作。 只需打開命令提示符並鍵入

暫無
暫無

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

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