无法在生产服务器上使用Elmah MVC访问/elmah?

55

我安装了elmah.mvc的nuget包,并保持了默认配置,没有设置发送邮件或将其插入SQL数据库。

当我在本地使用Visual Studio主机时,我可以打开我的应用程序并访问/elmah,以查看错误报告。然而,在生产环境中尝试访问/elmah时,我会遇到两个错误。首先,我会收到一个403访问被拒绝的服务器错误。然后在我的电子邮件(来自elmah)中,我会得到:

System.Web.HttpException: Server cannot set status after HTTP headers have been sent.

有人知道这里到底出了什么问题以及如何解决吗?谢谢。

根据下面的答案,我已经尝试了以下方法:

<system.webServer>中进行了以下操作:

<handlers>
  <add name="elmah" verb="GET" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
</handlers>

并且在 <system.web>

<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>

我尝试将路径设置为elmah.axd和简单的~/elmah。所有还是会出现相同的错误,而且在本地工作正常,但在生产环境中不起作用。

编辑:实际上,当我远程登录到服务器并通过浏览器访问它时(不使用localhost,而是实际的站点地址),它也可以正常工作。那么我没有什么权限?似乎是在服务器级别上。


如果您正在生产中,则还应查看此帖子:https://dev59.com/km855IYBdhLWcg3wUCeC - Shane Courtrille
我想我应该澄清一下,我的意思是当从本地主机以外的地方访问时,并不一定是其他人可以访问到我们的实际服务器。 - SventoryMang
IIS 6还是7?在IIS内部是否明确设置了.axd文件的任何权限? - Josh
2个回答

118

您需要通过向web.config文件中的<elmah>部分添加以下配置设置来启用Elmah进行远程访问。这个值的默认设置为false,仅允许本地主机访问,因此在Visual Studio内的本地计算机上工作。

   <elmah>
      <security allowRemoteAccess="true"/>
   </elmah>

我总是忘记这个,然后花几分钟想了想 ;)


3
刚刚在谷歌上搜到这个答案,准备点赞时突然发现我已经点过了——应该是上次尝试配置Elmah时忘记了!谢谢 :) - Jamie Humphries
2
刚遇到了和Jamie Humphries一样的问题...有些答案值得多次点赞。 - Anthony Shaw
我按照DOTang的建议在system.web中添加了<httpHandlers>,然后这个问题就解决了! - GabrielBB
我非常努力地尝试将<elmah><security allowRemoteAccess="true"/></elmah>添加到我的web.config文件中,但是一切都不起作用。我应该在哪里添加它?有哪些先决条件?在添加之前需要做什么准备工作?谢谢。 - Andrei Bazanov
唯一的前提条件是您已将Elmah.MVC NuGet包添加到您的网站中。请按照项目网站上的说明进行操作-https://github.com/alexbeletsky/elmah-mvc - Paige Cook

1
请确保您的 HttpHandler 在 web.config 文件的 webServer 部分中定义。
<system.webServer>
  <httpHandlers>
    <add name="elmah" verb="GET" path="elmah.axd"  type="Elmah.ErrorLogPageFactory, Elmah"/>
  </httpHandlers>
</system.webServer>

我不确定你是否打算将其放在system.web中,因为system.webServer只有一个<handlers>标签,但我尝试将其放在两个位置,并尝试使用elmah.axd和~/elmah作为路径(因为它是MVC),但仍然无法正常工作,仍然出现相同的错误。 - SventoryMang
1
你是否已添加处理程序的路由?你可能已经为*.axd请求添加了忽略路线。 - scottm
我该怎么办?对于此路由没有控制器/操作。另外,是的,我有routes.IgnoreRoute("{resource}.axd/{*pathInfo}");但问题是,为什么它在本地主机上工作,甚至在不添加这些处理程序或路由的情况下直接浏览到URL(而不是本地主机)时也可以在服务器上工作呢?这是使用Elmah.Mvc,因此不需要太多自定义设置(根据我看到的文章似乎是您建议的内容),可以将其连接到MVC…尽管仍然有一些问题。 - SventoryMang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接