我正在尝试向IIS发布一个.NET Core ASP.NET网站,我从RC2升级到RTM。
作为一个完整性检查,我成功地从Visual Studio 2015发布了模板/示例“ASP.NET Core Web Application(.NET Framework)”应用程序。
但出于某种原因,在发布RTM升级版应用时,我收到 HTTP错误502.3 - 错误网关 指定的CGI应用程序遇到错误,服务器终止了该过程。
该站点正在从Visual Studio运行IIS Express。
我该如何调试?有人有什么想法吗?
的web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath=".\MyApp.exe" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
project.json
{
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"warningsAsErrors": true
},
"dependencies": {
"Microsoft.AspNetCore.Diagnostics.Elm": "0.1.0",
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
"Microsoft.AspNetCore.Authorization": "1.0.0",
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Hosting": "1.0.0",
"Microsoft.AspNetCore.Hosting.Abstractions": "1.0.0",
"Microsoft.AspNetCore.Http.Extensions": "1.0.0",
"Microsoft.AspNetCore.Localization": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.Routing": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.AspNetCore.Session": "1.0.0",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.Extensions.Caching.SqlServer": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
"Microsoft.AspNetCore.Razor.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"
},
"frameworks": {
"net461": {}
},
"tools": {
"BundlerMinifier.Core": "2.0.238",
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},
"scripts": {
"prepublish": [ "bower install", "dotnet bundle" ],
"postpublish": "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"
},
"publishOptions": {
"include": [
"wwwroot",
"web.config",
"appsettings.json",
"**/*.cshtml",
"Config/*.json"
]
]
}
}
答案 0 :(得分:10)
我该如何调试?有人有主意吗?
以下是三个想法:
Read this并确保您已覆盖所有内容。
从命令行运行已发布的.\MyApp.exe
。那样有用吗?
将stdoutLogEnabled="false"
更改为true
,然后检查stdoutLogFile=".\logs\stdout"
处的日志。那里的错误可能会告诉你一些事情。
在事件查看器中检查IIS应用程序日志。那里的错误可能会告诉你一些事情。
事件查看器应用程序日志
答案 1 :(得分:9)
如果您长时间运行任务,并且Web浏览器在2分钟内没有收到响应(默认请求时间),您将收到此错误。因为在超时后,IIS将替换应用程序以使用“Bad Gateway”响应客户端。
也许您应该在web.config中更改请求时间。
在 system.webServer / aspNetCore 部分设置 requestTimeout 属性,以指定ASP.NET核心模块等待侦听进程的响应的持续时间% ASPNETCORE_PORT%。
就像这样:
<system.webServer>
<aspNetCore requestTimeout="00:20:00" ... />
</system.webServer>
答案 2 :(得分:2)
解决方案对我不起作用,但是做了什么:
启用网络开发者模式(在浏览器中按F12)=&gt; application tab =&gt;然后删除所有cookie。 刷新页面并vo:它有效。 您也可以复制您的URL并粘贴到另一个未运行任何MVC项目的浏览器。
我的项目在Internet Explorer和Microsoft Edge上运行,没有任何更改。 也许这就是你错误的原因。
答案 3 :(得分:0)
不是直接回答OP对此502.3错误的特定实例,但是如果存在无限循环,也可能会发生该错误,因为我不小心将其留在了应用程序中:
fn main() {
let mut score = Some(42i32);
let res = if let Some(41) = score {
println!("41 is matched");
1i32
} else if let Some(ref mut s) = score { //&mut score {
//let mut s2 = s;
//println!("s: {:#?}", s);
test(&mut &mut *s); // This part may be like this for borrowing
//println!("s: {:#?}", s);
1i32
} else {
0i32
};
//println!("Result: {:#?}", score);
assert_eq!(res, 1i32);
}
fn test(ref mut s: &mut &mut i32) -> i32 {
//let mut s2 = s;
return test2(&mut *s);
}
fn test2(n: &mut i32) -> i32 {
*n += 1;
//println!("Value: {}", *(*n));
return *n;
}
没有明显的错误表明这是问题所在。希望对别人有帮助。
答案 4 :(得分:0)
一个可能的原因是,您的API的return
语句之后有一些异常。就我而言,我在IActionResult
中返回的对象中有一个循环引用。调试时,我使用Newtonsoft.Json.JsonConvert.SerializeObject()
将要返回的对象转换为JSON格式。这导致从API端点返回以下异常:
Newtonsoft.Json.JsonSerializationException:为类型为“ xxx”的属性“ xxx”检测到自引用循环。路径“ xxx”。?在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference中(JsonWriter编写器,对象值,JsonProperty属性,JsonContract合同,JsonContainerContract containerContract,JsonProperty containerProperty)