为什么我的 html 调试 msgs/comments (Response.Write) 中只有一个没有被写入 "View Source"?

Why are all but one of my html debug msgs/comments (Response.Write) not being written to the "View Source"?

我知道这段代码正在被攻击,因为正在完成插入:

Response.Write("<!-- Made it just before INSERT INTO CustomerCategoryLog -->")
Dim query As String = String.Empty
query &= "INSERT INTO CustomerCategoryLog (MemberNo, Unit, Custno, "
query &= "Category, Subcategory, BeginDate, "
query &= "EndDate, ChangedBy, ChangedOn) "
query &= "VALUES (@MemberNo, @Unit, @Custno, @Category, @Subcategory, @BeginDate, @EndDate, @ChangedBy, @ChangedOn)"

Using conn As New SqlConnection("SERVER=PROSQL05;DATABASE=cpsdata;UID=sa;PWD=sqlsql")
    Using comm As New SqlCommand()
        Response.Write("<!-- Made it into the using comm As New SqlCommand() block -->")
        With comm
            .Connection = conn
            .CommandType = CommandType.Text
            .CommandText = query
            .Parameters.Add("@MemberNo", SqlDbType.NVarChar).Value = MemberNo
            .Parameters.Add("@Unit", SqlDbType.NVarChar).Value = Unit
            .Parameters.Add("@Custno", SqlDbType.NVarChar).Value = CustNo
            .Parameters.Add("@Category", SqlDbType.NVarChar).Value = Category
            .Parameters.Add("@Subcategory", SqlDbType.NVarChar).Value = Subcategory
            .Parameters.Add("@BeginDate", SqlDbType.DateTime).Value = Date.Now()
            .Parameters.Add("@EndDate", SqlDbType.DateTime).Value = Date.Now().AddDays(365)
            .Parameters.Add("@ChangedBy", SqlDbType.NVarChar).Value = Environment.UserName
            .Parameters.Add("@ChangedOn", SqlDbType.DateTime).Value = Date.Now()
        End With
        Try
            Response.Write("<!-- Made it into the try block -->")
            conn.Open()
            comm.ExecuteNonQuery()
        Catch '(ex as SqlException)
            Response.Write("<!-- Made it into the catch block -->")
        End Try
    End Using 'comm
End Using 'conn

然而 Response.Write() 中的 none 已呈现到页面,如 "View Source" 所示。

为什么不呢?在前面的地方,comment/debug 消息 被写入,使用相同的语法:

Response.Write("<!-- IsNewBusiness after NOT adoRS.EOF check = " & CStr(IsNewBusiness) & " -->")

为什么对 Response.Write() 的后续调用什么都不做?

更新

在 Web.Config 中 一个 "system.diagnostics" 部分,内容如下:

<system.diagnostics>
    <sources>
      <!-- This section defines the logging configuration for My.Application.Log -->
      <source name="DefaultSource" switchName="DefaultSwitch">
        <listeners>
          <add name="FileLog" />
          <!-- Uncomment the below section to write to the Application Event Log -->
          <add name="EventLog" />
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="DefaultSwitch" value="Information" />
    </switches>
    <sharedListeners>
      <add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter" />
      <!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
      <add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="eServices" />
    </sharedListeners>
  </system.diagnostics>

如您所见,有一个 "sharedListeners" 小节,但据我所知,它并没有清除它们...

更新 2

这是我在 "HttpContext.ApplicationInstance.Context." 到 "Trace.Write(" 之前得到的:

Server Error in '/EMS/customerreportingnet' Application.
--------------------------------------------------------------------------------

Compilation Error 
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: BC30469: Reference to a non-shared member requires an object reference.

Source Error:



Line 184:            ' Put the Category Table insert here, too...
Line 185:            ' Beginning of SQL Insert code added 3/6/2017 - if not reached, move it above the "END IF"
Line 186:            HttpContext.ApplicationInstance.Context.Trace.Write("<!-- Made it just before INSERT INTO CustomerCategoryLog -->")
Line 187:            Dim query As String = String.Empty
Line 188:            query &= "INSERT INTO CustomerCategoryLog (MemberNo, Unit, Custno, "


Source File: C:\EnhancedMonthlySalesReporting\customerreportingnet\customerreportingnet\pages\custmaint_entry.aspx    Line: 186 

UDPATE 3

一个(对我来说非常)奇怪的事情是,当我得到 trace.axd 时,它没有列出有问题的文件——我插入了对 Trace.axd 的调用的那个文件:

但我在那个页面上(虽然它没有显示在 URL 中,它仍然是 http:///localhost/EMS/customerreportingnet),当我将“/trace.axd”附加到URL 并按回车键。

为什么文件没有出现在列表中?

如果我 "View Source" 从那个页面,我确实看到它的一些输出,比如 ""

所以 custmaint_entry.aspx 正在被访问 - 这也被 "View Source" 窗格中的 URL 看到:

如果 Response.Write 调用以这样一种方式编写,即它们最终出现在浏览器显示的 html 负载中,这取决于您将这些调用置于 ASP.NET 生命周期中的哪个位置.

从表面上看,您正在尝试 debug/trace 复杂网页中的代码流。我个人会依赖 .Net Framework 提供的 Tracing facilities 和 ASP.NET.

在您的网络应用程序的根目录中,将 web.config 编辑为 include/update 带有 trace 标签的 system.web 标签。

<config>
   <!-- lots of stuff -->
    <system.web>
        <trace enabled="true" 
               pageOutput="false" 
               requestLimit="1337" 
               localOnly="false"/>
    </system.web>
    <!-- lots of stuff -->
</config>

为了完整性,请检查您是否有 system.diagnostics 标签,并确认 <sharedListeners> 标签中没有 <clear/> 元素。

在您的其中一个页面上(比如 /about.aspx)添加代码(内联或在代码后面):

System.Web.HttpContext.Current.Trace.Write("foo", "bar")

现在保存并 运行 您的 webapp 并导航到 /about.aspx 并确保您执行上述 Trace.Write 行。

访问/trace.axd。您将获得已提供页面的概览。找到您的 /about.aspx 行,然后单击右侧的 View Details link。这会将您带到应该包含您的跟踪消息的详细信息页面。

在/trace.axd的起始页,您也可以点击左上角的link清除痕迹。

使用上面的 Trace 消息写入 Response 流的好处是,这些 Trace 调用可以留在生产代码中,然后随意启用。通过网络向浏览器发送过多数据可能会减慢应用程序的响应时间。