ASP.NET - 部署问题 - 通过 Web.Config 启用堆栈跟踪/跟踪侦听器日志以查找内部服务器 500 错误的原因

Posted

技术标签:

【中文标题】ASP.NET - 部署问题 - 通过 Web.Config 启用堆栈跟踪/跟踪侦听器日志以查找内部服务器 500 错误的原因【英文标题】:ASP.NET - Deployment Issues - Enabling Stack Trace / Trace Listener Log via the Web.Config to find the cause of Internal Server 500 Error 【发布时间】:2011-08-20 11:49:56 【问题描述】:

在我的本地计算机上部署已编译且没有错误的应用程序后,我收到内部服务器 500 错误。部署应用程序的服务器具有大量安全性,因此我需要为每个目录指定读写访问权限。此应用程序使用 Windows 身份验证和 Web 服务通过代理填充下拉框。我认为可能存在连接到 Web 服务的问题,或者文件的读/写安全性问题,或者 Active Directory 身份验证问题。

我编辑了 web.config,以便使用以下代码显示有关错误原因的更多信息:

<system.web>
  <customErrors mode ="Off"></customErrors>
  <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
  <trace enabled="true" pageOutput="true" />

  <authentication mode="Windows"/>
   <authorization>
    <allow roles="alg\ADMIN_USER" />
    <deny users="*" />        
  </authorization> 

<client>
  <endpoint address="http://63.236.108.91/aCompService.svc" binding="basicHttpBinding"
    bindingConfiguration="BasicHttpBinding_IAcompService" contract="aComp_ServiceReference.IAcompService"
    name="BasicHttpBinding_IAcompService" />
</client>

我现在收到以下错误:

    500 - Internal server error.

    There is a problem with the resource you are looking for, and it cannot be 
    displayed. 

我想查看包含错误来源的堆栈跟踪。

我应该在 web.config 文件中添加什么以显示完整的堆栈跟踪?

从本地运行到部署需要在网站上进行哪些更改?

更新-部署人员解除了一些安全读/写限制,现在我明白了

    Parser Error Message: The connection name 'ApplicationServices' was not found in 
    the applications configuration or the connection string is empty. 

为了摆脱错误,我删除了在第 72 行声明的 AspNetSqlRoleProvider 并且仍然 出错了。然后我删除了 AspNetWindowsTokenRoleProvider 和所有提供者信息 并得到以下错误:

    Exception message: Default Role Provider could not be found.  

我们的托管都是远程完成的,但服务器人员可以远程登录本地网络服务器。看起来服务器人员没有将文件发布在正确的位置。现在,我现在得到错误:

    There is a problem with the resource you are looking for, and it cannot 
    be displayed.

关于如何解决这些问题的任何想法?

感谢收看!

【问题讨论】:

"Off" 应该这样做......这很奇怪。 如果使用数据库,请检查连接字符串:) @GalacticCowboy,我远程访问了该站点。我们的托管都是远程完成的。看起来服务器人员没有将文件发布在正确的位置。现在,我现在收到错误:您要查找的资源有问题,无法显示。我认为连接到网络服务可能存在问题。我有代理可以获取应用程序下拉框的信息。 @IrishChieftain,我使用的不是数据库连接字符串而是网络服务 @Josh M,我更新了问题,现在看看,让我知道你的想法 【参考方案1】:

您在应用程序文件夹层次结构中的其他位置是否有一个 web.config,它可能会覆盖您所做的更改?当开发人员将 web.config 复制到一个级别以在进行测试更改时保留它的副本时,我曾经看到过困惑。

这可能会让人头疼。

【讨论】:

【参考方案2】:

也许使用模拟应该会有所帮助? 我在 web.config 中添加了以下内容:

  <authentication mode="Windows"/>
  <identity impersonate="true"/>

我添加了 WriteToEventLog 代码,以便我可以通过该方法跟踪事件日志中的错误。

    Catch Ex As Exception
        WriteToEventLog(Ex.Message, "GetCarriers-Method", EventLogEntryType.Error, "aComp-utility")


    Catch ex As Exception
        WriteToEventLog(ex.Message, "GetMarketingCompanies-Method", EventLogEntryType.Error, "aComp-utility")

也许添加 TraceListenerLog 会有所帮助?

参考MSDN 了解有关此代码的更多信息。我在 web.config 中添加了以下内容:

 <configuration>
   <system.diagnostics>
     <trace autoflush="false" indentsize="4">
       <listeners>
         <add name="myListener"
           type="System.Diagnostics.EventLogTraceListener"
           initializeData="TraceListenerLog" />
       </listeners>
     </trace>
   </system.diagnostics>
 </configuration>

我还应该在 default.aspx.vb 上添加以下内容吗?

Overloads Public Shared Sub Main(args() As String)

' Create a trace listener for the event log.
Dim myTraceListener As New EventLogTraceListener("myEventLogSource")

' Add the event log trace listener to the collection.
Trace.Listeners.Add(myTraceListener)

' Write output to the event log.
Trace.WriteLine(myTraceListener)

End Sub 'Main

【讨论】:

【参考方案3】:

我能够通过复制我的配置文件然后删除一个段然后一步一步地测试结果来解决同样的问题。我发现,在我移除我的handelers 之后它工作正常。

【讨论】:

以上是关于ASP.NET - 部署问题 - 通过 Web.Config 启用堆栈跟踪/跟踪侦听器日志以查找内部服务器 500 错误的原因的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Web 部署项目:摆脱 .compiled 文件

asp.net mvc项目部署以后通过域名访问,IIS好像找不到默认文档

在 asp.net 中部署时验证正在消失

部署后 ASP.Net Core Identity 登录状态丢失

部署 ASP.Net MVC 应用程序

在 Azure 上部署 Asp.NET Core Web App