【问题标题】:Randomly Get Erro 500, from IIS 10从 IIS 10 随机获取错误 500
【发布时间】:2020-12-01 09:50:18
【问题描述】:

我有一个奇怪的问题我有一个在 IIS 10 (Win2019) 上发布的 ASP Web API,并且该 API 与另一台服务器上的 Oracle 数据库连接。该项目运行良好,但一些请求失败并出现错误 500,此问题随机发生,有时 IIS 上的网站会冻结,需要重新启动才能再次工作。

我从 IIS 启用跟踪错误跟踪并收到此警告:


模块名称 ManagedPipelineHandler

通知 EXECUTE_REQUEST_HANDLER

Http状态 500

HttpReason 内部服务器错误

HttpSubStatus 0

错误代码 操作成功完成。 (0x0)

配置异常信息


,这个网站发布时需要一个客户端 SSL 证书,我发现有些人在谈论这个可能在启用这样的客户端证书时发生https://boyan.io/random-500-errors-iis-client-certificates/

但这并不能解决问题,还尝试禁用所需的客户端 SSL,但同样的问题仍然存在。

解决此错误的任何想法,

谢谢

【问题讨论】:

  • 错误 500 表示程序 (asp.net) 中存在错误,IIS 不会显示错误。它将在系统或应用程序下的 NT 事件日志中记录错误。如果您使用像 ELMAH 这样的错误记录器来记录错误,那就更好了。你有错误记录器吗?检查 NT 事件日志并告诉我们您发现了什么。

标签: asp.net iis internal-server-error http-status-code-500


【解决方案1】:

你把应用池的托管管道模式设置成什么,应用池的标识是什么?

大多数情况下,出现这个问题是因为应用池设置为经典模式,改成集成模式即可解决。

根据文档中描述的另一种可能性,.net 框架的损坏也可能导致此问题。使用命令修复它。

  • 如果计算机运行的是完整的 Microsoft .NET Framework,请输入以下命令以更改为 Microsoft.NET\Framework64\v4.0.30319\SetupCache 文件夹,然后运行 ​​setup.exe:

    cd\Windows\Microsoft.NET\Framework64\v4.0.30319\SetupCache
    setup.exe /repair /x86 /x64 /ia64 /norestart
    
  • 如果计算机正在运行 Microsoft .NET Framework 客户端配置文件,请输入以下命令以更改为 Microsoft.NET\Framework64\v4.0.30319\SetupCache\Client 文件夹,然后运行 ​​setup.exe:

    cd\Windows\Microsoft.NET\Framework64\v4.0.30319\SetupCache\Client
    setup.exe /repair /x86 /x64 /ia64 /parameterfolder Client /norestart
    

终于。

iisreset

【讨论】:

  • 感谢您的重播,应用程序池在集成模式下工作,并尝试您的解决方案,但问题仍然存在。
【解决方案2】:

我从 POSTMAN 收到如下错误:此错误是随机的,因此某些请求会因错误 500 而停止


"Message": "发生错误。", "ExceptionMessage": "连接请求超时", "ExceptionType": "Oracle.ManagedDataAccess.Client.OracleException", "StackTrace": " 在 OracleInternal.ConnectionPool.PoolManager3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, OracleConnection connRefForCriteria, String affinityInstanceName, Boolean bForceMatch)\r\n at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, OracleConnection connRefForCriteria, String affinityInstanceName, Boolean bForceMatch)\r\n at OracleInternal.ConnectionPool.OracleConnectionDispenser3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securePassword, SecureString secureProxyPassword, OracleConnection connRefForCriteria)\r\n 在 Oracle.ManagedDataAccess.Client.OracleConnection.Open ()\r\n 在 InqBankApi.Services.Utilties.DbSession.CreateSession1() 在 C:\inetpub\wwwroot\...\....\Services\Utilities\DbSession.vb:line 35\r\n at InqBankApi.Services.StatementsService.get_bal(Int32 srvno, String acctno) in C:\inetpub\wwwroot\....\....\Services\StatmentsService.vb:line 1116\r\n at lambda_method(Closure , Object , Object[] )\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c__DisplayClass6_1.b__3(Object instance, Object[] methodParameters)\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor .ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancelToken)\r\n--- 堆栈结束来自先前引发异常的位置 ---\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n 在System.Web.Http.Controllers.ApiControllerActionInvoker.d__1.MoveNext()\r\n--- 从先前引发异常的位置结束堆栈跟踪---\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Web.Http.Controllers.ActionFilterResult.d__5.MoveNext()\r\n--- 堆栈结束从先前引发异常的位置跟踪 ---\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n 在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__15.MoveNext()" }


【讨论】:

  • 应用程序和Oracle的连接好像有问题。当你发送一个会导致这个错误的请求时,应用程序中的相应代码已经超时连接到Oracle。
猜你喜欢
  • 2019-03-11
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多