失败请求跟踪的IIS / ASP.net错误:“此内容的失败请求跟踪已存在”

时间:2010-12-17 21:20:54

标签: asp.net iis iis-7 request tracing

我正在尝试将失败的请求跟踪添加到我的IIS 7 / ASP.NET服务器。

首先,我为“all content, error codes 400-999”创建失败的请求跟踪,因为要保存所有错误。

然后,我尝试为“all content, time: 5 seconds”创建一个跟踪,因为我想跟踪所有“长”请求。但是,IIS 7给出了错误:“此内容的失败请求跟踪已存在”。

如何为所有带有>的内容添加此第二条跟踪5秒钟?

alt text

1 个答案:

答案 0 :(得分:2)

在您的web.config失败的请求跟踪配置看起来像:

<tracing>
  <traceFailedRequests>
    <add path="*">
      <traceAreas>
        <add provider="ASP" verbosity="Verbose" />
        <add provider="ASPNET" areas="Infrastructure, etc" verbosity="Verbose" />
        <add provider="ISAPI Extension" verbosity="Verbose" />
        <add provider="WWW Server" areas="Authentication, etc" verbosity="Verbose" />
      </traceAreas>
      <failureDefinitions statusCodes="400-999" />
    </add>
  </traceFailedRequests>
</tracing>

属性path定义内容类型,即Add FRT向导第一页中的选项(*,* .aspx,* .asp,Custom)。

如果您检查system.webServer/tracing/traceFailedRequestsapplicationHost.config部分的架构(位于%systemroot%\System32\inetsrv\ config\schema\IIS_schema.xml,您会发现以下限制:

失败的请求路径必须是唯一的:

<attribute name="path" type="string" isUniqueKey ="true" />

在路径中,每个提供者(ASP,ASPNET,ISAPI扩展等)必须是唯一的:

<attribute name="provider" type="string" required="true" isUniqueKey="true" />

如果添加了另一个跟踪规则来跟踪相同的内容(*)但指定timeTaken,那么您将尝试添加:

<add path="*">
  <traceAreas>
    <add provider="ASP" verbosity="Verbose" />
    <add provider="ASPNET" areas="Infrastructure, etc" verbosity="Verbose" />
    <add provider="ISAPI Extension" verbosity="Verbose" />
    <add provider="WWW Server" areas="Authentication, etc" verbosity="Verbose" />
  </traceAreas>
  <failureDefinitions statusCodes="400-999" />
</add>

这当然与架构中的规则冲突,这些规则表明路径必须是唯一的。

但是,当timeTaken为&gt; = = 5秒时,您可以指定要跟踪的特定内容。

例如:

<add path="*.aspx">
  <traceAreas>
    <add provider="ASP" verbosity="Verbose" />
    <add provider="ASPNET" areas="Infrastructure, etc" verbosity="Verbose" />
    <add provider="ISAPI Extension" verbosity="Verbose" />
    <add provider="WWW Server" areas="Authentication, etc" verbosity="Verbose" />
  </traceAreas>
  <failureDefinitions timeTaken="00:00:05" statusCodes="400-999" />
</add>
<add path="*.asp">
  <traceAreas>
    <add provider="ASP" verbosity="Verbose" />
    <add provider="ASPNET" areas="Infrastructure, etc" verbosity="Verbose" />
    <add provider="ISAPI Extension" verbosity="Verbose" />
    <add provider="WWW Server" areas="Authentication, etc" verbosity="Verbose" />
  </traceAreas>
  <failureDefinitions timeTaken="00:00:05" statusCodes="400-999" />
</add>
<add path="*.asmx">
  <traceAreas>
    <add provider="ASP" verbosity="Verbose" />
    <add provider="ASPNET" areas="Infrastructure, etc" verbosity="Verbose" />
    <add provider="ISAPI Extension" verbosity="Verbose" />
    <add provider="WWW Server" areas="Authentication, etc" verbosity="Verbose" />
  </traceAreas>
  <failureDefinitions timeTaken="00:00:05" statusCodes="400-999" />
</add>

不像只能做一个通配符那么方便,但它是一种解决方法。