65.9K
CodeProject 正在变化。 阅读更多。
Home

Asp.Net 面试问题第三部分

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.39/5 (23投票s)

2008年9月2日

CPOL

21分钟阅读

viewsIcon

185000

Asp.Net 面试问题第三部分

Title:        ASP.NET
Author:      Shivprasad Koirala 
Email:       shiv_koirala@yahoo.com
Language:    ASP.NET
Level:       Beginner
Description: .Net Interview Questions 4th Edition

ASP.NET


(I) Session 是否使用 Cookies?

(I) 如何强制所有验证控件运行?

(B) 如何检查所有验证控件是否有效且正确?

(A) 如果您的网页启用了客户端验证,这是否意味着服务器端代码不会运行?

(A) 哪个 JavaScript 文件用于在客户端验证验证器?

(B) 如何禁用验证器中的客户端脚本?

(A) 如何在客户端的消息框中显示完整的验证错误消息?

(B) 您发现某个验证非常复杂,不适合任何现有验证器,您会怎么做?

(B) 如何终止用户会话?

(I) 如何在 ASP.NET 中上传文件?

(I) 如何从 ASP.NET 发送电子邮件?

(A) 不同的 IIS 隔离级别有哪些?

(A) ASP 使用 STA 线程模型,ASP.NET 使用什么线程模型?

(A) <%@ page aspcompat=true %> 属性有什么用?

(B) 解释服务器端和客户端代码之间的区别?

(I) 您能详细解释 Forms 认证吗?

(A) 如何在 Forms 认证中退出?

(A) 如果浏览器端未启用 Cookies,Forms 认证是否有效?

(A) 如何在数据网格中使用复选框?

(I) 在 VB.NET 中创建 Windows 服务有哪些步骤?

(A) “Web 农场”和“Web 园”有什么区别?

(B) 网格布局和流式布局的主要区别是什么?

(I) ASP.NET 中的跟踪 (trace) 和调试 (debug) 有什么区别?

(A) 如何在 ASP.NET 页面上启用跟踪?

(B) 实现调试和跟踪需要哪个命名空间?

(A) 您能解释跟踪侦听器 (trace listener) 的概念吗?

(I) 什么是跟踪开关 (trace switches)?

引言

在本节中,我们将讨论 ASP.Net 中一个重要的概念。您可以从 http://www.questpond.com/SampleDotNetInterviewQuestionBook.zip 下载我的 .NET 面试问题 PDF。

我为架构师准备的面试问题系列的前几部分

第一部分 - SoftArchInter1.aspx

第二部分 - SoftArch2.aspx

第三部分 - SoftArch3.aspx

第四部分 - SoftArch4.aspx

UML 面试问题第一部分 SoftArch5.aspx

祝您求职愉快......

(I) Session 是否使用 Cookies?


转折点:- 我们如何让 Session 不使用 Cookies?
留给用户,你会乐于找到这个答案。

(I) 如何强制所有验证控件运行?


Page.Validate

(B) 如何检查所有验证控件是否有效且正确?


使用 Page.IsValid() 属性可以检查是否所有验证都已完成。

(A) 如果您的网页启用了客户端验证,这是否意味着服务器端代码不会运行?


当启用客户端验证时,服务器会为自定义验证器发出 JavaScript 代码。但是,请注意这并不意味着自定义验证器的服务器端检查不会执行。它会执行两次冗余检查,因为有些验证器不支持客户端脚本。

(A) 哪个 JavaScript 文件用于在客户端验证验证器?


安装在 IIS 根目录“aspnet_client”中的 WebUIValidation.js JavaScript 文件用于在客户端验证验证控件。

(B) 如何禁用验证器中的客户端脚本?


将“EnableClientScript”设置为 false。

(A) 如何在客户端的消息框中显示完整的验证错误消息?


在验证摘要中将“ShowMessageBox”设置为 true。

(B) 您发现某个验证非常复杂,不适合任何现有验证器,您会怎么做?


最好的方法是使用 CustomValidators。下面是一个自定义验证器的示例代码,它检查文本框不应为零值。
<asp:CustomValidator id="CustomValidator1" runat="server"
ErrorMessage="数字不能被零除"
ControlToValidate="txtNumber"
OnServerValidate="ServerValidate"
ClientValidationFunction="CheckZero" /><br>
输入
<asp:TextBox id="txtNumber" runat="server" />
<script language="javascript">
<!--function CheckZero(source, args) {
int val = parseInt(args.Value, 10);
if (value==0) {
args.
IsValid = false;
}
}
// -->
</script>

(I) 当浏览器请求 ASPX 页面时究竟发生了什么?


注意:- 在这里,面试官期望完整地了解 ASPX 页面在 IIS 和 ASP.NET 引擎中是如何处理的。
当我们请求 ASPX 页面时会发生以下步骤:-
浏览器向 Web 服务器发送请求。假设另一端的 Web 服务器是 IIS。
IIS 收到请求后,会查找哪个引擎可以处理此请求。引擎指的是可以解析此页面或编译并向浏览器发送响应的 DLL。将哪个请求映射到哪个引擎由所请求页面的文件扩展名决定。
根据文件扩展名,以下是一些映射:
• .aspx,用于 ASP.NET 网页,
• .asmx,用于 ASP.NET Web 服务,
• .config,用于 ASP.NET 配置文件,
• .ashx,用于自定义 ASP.NET HTTP 处理程序,
• .rem,用于远程处理资源
您还可以使用 IIS 引擎配置扩展名映射到哪个引擎。



图:- 7.1 以下屏幕显示了一些 IIS 映射

 

例如,ASP 页面将发送到旧的经典 ASP.DLL 进行编译。而 .ASPX 页面将路由到 ASP.NET 引擎进行编译。
• 由于本书主要针对 ASP.NET,我们将研究 ASP.NET 页面(即 ASPX 页面)的生成序列。一旦 IIS 将请求传递给 ASP.NET 引擎,页面必须经过 HTTP 模块部分和 HTTP 处理程序部分。这两个部分都有各自的工作要做,以便页面正确编译并发送到 IIS。HTTP 模块检查传入请求,并根据请求更改请求的内部工作流。HTTP 处理程序实际编译页面并生成输出。如果您查看您的 machine.config 文件,您将看到以下 HTTP 模块部分:

<httpModules>
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" />
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
<add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
<add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" />
<add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule,
System.Web.Mobile, Version=1.0.5000.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</httpModules>


上述映射将显示哪个命名空间处理哪个功能。例如,FormsAuthentication 由“System.Web.”处理。
Security.FormsAuthenticationModule”。如果您查看 web.config 文件,HTTP 模块部分是进行身份验证和授权的地方。

好的,现在 HTTP 处理程序是实际进行编译并生成输出的地方。以下是 WEB.CONFIG 文件中 HTTP 处理程序部分的粘贴内容。

<httpHandlers>
<add verb="*" path="*.vjsproj" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.java" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.jsl" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="trace.axd" type="System.Web.Handlers.TraceHandler" />
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
<add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory" />
...
</httpHandlers>


• 根据文件扩展名,处理程序决定哪个命名空间将生成输出。例如,所有 .ASPX 扩展名文件将由 System.Web.UI.PageHandlerFactory 编译。
• 文件编译完成后,它将再次发送回 HTTP 模块,然后从那里发送到 IIS,再发送到浏览器。



图:- 7.2 IIS 从各个部分的流程。

(B) 如何终止用户会话?


会话中止

(I) 如何在 ASP.NET 中上传文件?


我将把这个问题留给读者……只需提示一下,我们需要使用 System.Web.HttpPostedFile 类。

(I) 如何从 ASP.NET 发送电子邮件?


ASP.NET 提供了两个命名空间:SystemWEB.mailmessage 类和 System.Web.Mail.Smtpmail 类。只需做一点小作业,创建一个 Asp.NET 项目,然后向 shiv_koirala@yahoo.com 发送一封电子邮件。不要发送垃圾邮件。

(A) 不同的 IIS 隔离级别有哪些?


IIS 有三个隔离级别:-
低(IIS 进程):- 在此级别,主 IIS 进程和 ASP.NET 应用程序在同一进程中运行。因此,如果任何一个崩溃,另一个也会受到影响。例如,假设(当然这不可能)我在一台 PC 上托管了 Yahoo、Hotmail、Amazon 和 Google。那么所有应用程序和 IIS 进程都在同一进程中运行。如果任何网站崩溃,它都会影响所有人。

图:- 7.3 低 IIS 进程场景


中(池化):- 在中等池化场景中,IIS 和 Web 应用程序在不同的进程中运行。因此,在这种情况下,存在两个进程:process1 和 process2。在 process1 中,IIS 进程正在运行;在 process2 中,我们有所有 Web 应用程序在运行。

图:- 7.4 中等池化场景

高(隔离):- 在高隔离场景中,每个进程都在自己的进程中运行。在下图所示中,有五个进程,每个进程处理单独的应用程序。这消耗大量内存,但可靠性最高。

图:- 7.5 高隔离场景


(A) ASP 使用 STA 线程模型,ASP.NET 使用什么线程模型?


ASP.NET 使用 MTA 线程模型。

(A) <%@ page aspcompat=true %> 属性有什么用?


此属性类似于兼容性选项。如前所述,ASP 在 STA 模型中工作,ASP.NET 在 MTA 模型中工作,但是如果您的 ASP.NET 应用程序使用 VB COM 组件怎么办?为了使 VB COM 在 ASP.NET 线程模型中正常运行,我们必须设置属性。定义 ASPCOMPAT 指令属性后,ASP.NET 页面在 STA 模型中运行,从而在 ASP.NET 和不支持 MTA 模型的旧 COM 组件之间建立兼容性。

(B) 解释服务器端和客户端代码之间的区别?


服务器端代码在服务器端 IIS 上的 ASP.NET 框架中执行,而客户端代码在浏览器上执行。

(I) 您能详细解释 Forms 认证吗?


在旧的 ASP 中,如果你被要求创建一个登录页面并进行身份验证,你必须做大量的自定义编码。现在在 ASP.NET 中,通过引入 Forms 认证,这变得容易了。所以让我们详细了解什么是 Forms 认证。
Forms 认证使用票据 cookie 来查看用户是否已认证。这意味着当用户首次认证时,会设置一个 cookie 来告知该用户已认证。如果 cookie 过期,则 Forms 认证机制会将用户发送到登录页面。
以下是 Forms 认证的步骤:-
• 使用 Forms 认证配置 Web.config 文件。如下面的配置文件所示,我们已给出 cookie 名称和 loginurl 页面。

<configuration>
<system.web>
<!-- 其他设置省略。 -->
<authentication mode="Forms">
<forms name="logincookies"
loginUrl="login.aspx"
protection="All"
timeout="30"
path="/" />
</authentication>
</system.web>
</configuration>

• 移除 IIS Web 应用程序的匿名访问,以下是 Web.config 文件的更改。

<configuration>
<system.web>
<!-- 其他设置省略。 -->
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>

• 创建登录页面,该页面将接受用户信息。您需要创建登录页面,即 Login.aspx,它将实际获取用户数据。
• 最后,在登录按钮中编写一小段代码。
假设登录页面有两个文本框:TX name 和 txtpassword。
此外,导入 System.Web.Security 并在页面的登录按钮中放入以下代码。
If Page.IsValid Then
If FormsAuthentication.Authenticate(txtName.Text, txtPassword.Text) Then
FormsAuthentication.RedirectFromLoginPage(txtName.Text, False)
Else
lblStatus.Text = "错误,用户不正确"
End If
End If

(A) 如何在 Forms 认证中退出?


FormsAuthentication.Signout ()

(A) 如果浏览器端未启用 Cookies,Forms 认证是否有效?


不,它不起作用。

(A) 如何在数据网格中使用复选框?


转折点:- 如何跟踪数据网格中作为其中一列的复选框中的事件?

注意:- 当面试官想了解您是否真正参与过项目实践时,通常会问这个问题。


以下是要完成的步骤:-
• 在 ASPX 页面中,您必须在数据网格中添加 Item template 标签。

<ItemTemplate>
<asp:CheckBox id="CheckBox1" runat="server" AutoPostBack="True" OnCheckedChanged="Check_Clicked"></asp:CheckBox>
</ItemTemplate>


如果您查看 Item template,我们会发现有“OnCheckChanged”事件。这个“OnCheckChanged”事件的“Check Clicked”子例程实际上是在后台代码中。请注意,这个后台代码中的方法应该是“protected”或“public”。
下面是定义该方法的子例程:

Protected Sub Check Clicked (By Val sender As Object, By Val e As EventArgs)
‘做一些事情
End Sub

以上步骤应简要地向面试官说明,这将快速展现您在 ASP.NET 方面的实践经验。

(I) 在 VB.NET 中创建 Windows 服务有哪些步骤?


Windows 服务是长时间运行的可执行应用程序,它们在自己的 Windows 会话中运行,因此能够在计算机启动时自动启动,并且还可以手动暂停、停止或重新启动。
创建服务的步骤如下:-
创建一个“Windows 服务”类型的项目。

图 7.6:- 为 Windows 服务创建项目


• 如果您看到,创建的类会自动继承自“System.ServiceProcess.ServiceBase”。
• 您可以覆盖服务提供的以下事件并编写自定义代码。所有三个主要事件都可以使用,即 Start、Stop 和 Continue。


protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
protected override void OnContinue()
{
}


现在要安装服务,您需要运行 install util exe。

InstallUtil <项目路径>\BIN\MyNewService.exe

(A) “Web 农场”和“Web 园”有什么区别?


“Web 农场”用于提供冗余以最大程度地减少故障。它由两个或更多配置相同、流式传输相同内容的 Web 服务器组成。当任何请求到来时,都会有一个切换/路由逻辑,它决定由农场中的哪个 Web 服务器处理请求。例如,我们有两个服务器“Server1”和“Server2”,它们具有相同的配置和内容。因此,在这两个服务器和用户之间有一个特殊的开关,它相应地路由请求。

图 7.7:- 运行中的 Web 农场


上图详细解释了 Web 农场的工作原理。你可以看到中间有一个路由器,它接收请求并查看哪个服务器负载最小,然后将请求转发到该服务器。因此,对于 request1,它路由到 server1;对于 request2,它路由到 server2;对于 request3,它路由到 server3;最后 request4 路由到 server4。所以你可以看到,因为我们有 Web 农场,server1 和 server2 各加载了两个请求,而不是一个服务器满载。使用这种架构的另一个优点是,如果其中一个服务器宕机,我们仍然可以使用另一个服务器运行,从而实现 24x7 的正常运行时间。
路由逻辑可以是多种不同的选项:-
• 循环:每个节点“轮流”接收请求。因此,server1 收到一个请求,然后 server2 收到一个请求,然后 server1,然后 server2。如上图所示。
• 最不活跃:哪个节点显示当前连接数最少,哪个节点就会收到新的连接。这有助于保持服务器节点之间的负载平衡。
• 最快回复:哪个节点回复更快,哪个节点就会收到新的请求。这也是一个不错的选择——特别是当节点性能可能不“相等”时。如果一个节点性能优于另一个节点,那么将更多请求发送到该节点,而不是发送到运行缓慢的节点?
在我们尝试理解什么是 web garden 之前,让我们先尝试理解 IIS 如何处理进程。IIS 的所有请求都路由到 IIS 5.0 的“aspnet_wp.exe”和 IIS 6.0 的“w3wp.exe”。在正常情况下,即没有 web garden 的情况下,所有请求只有一个工作进程实例(“aspnet_wp.exe”/“w3wp.exe”)。这个工作进程实例根据操作系统指令使用 CPU 处理器。

图 7.8:- 没有 Web Garden 的情况


然而,当我们为 Web 服务器启用 Web 园时,它会创建不同的工作进程实例,并且每个工作进程都在不同的 CPU 上运行。您可以在下面的图中看到,我们创建了不同的工作进程实例,它们在不同的 CPU 上运行。



图 7.9:- 启用 Web Garden 的情况


简而言之,我们可以将一种模型定义为 Web 园,在该模型中,单个服务器机器上的多个进程在多个 CPU 上运行。

(A) 我们如何配置“Web Garden”?


“Web 园”可以通过使用“machine.config”或“Web.config”文件中的进程模型设置进行配置。配置部分名为 <process Model>,如下面的示例所示。
以下示例。进程模型默认启用(enable=”true”)。下面是配置文件中的代码片段。

<process Model
enable=”true”
timeout=”infinite”
idle Timeout=”infinite”
shutdown Timeout=”0:00:05"
requestLimit=”infinite”
requestQueueLimit=”5000"
memoryLimit=”80"
webGarden=”false”
cpuMask=”12"
userName=””
password=””
logLevel=”errors”
clientConnectedCheck=”0:00:05"
/>

从上述 Web 园的进程模型部分,我们只关心“web garden”和“cpuMask”两个属性。
Web Garden:- 控制 CPU 亲和性。True 表示进程应与相应的 CPU 具有亲和性。默认值为 False。
CpuMask:- 指定多处理器服务器上的哪些处理器有资格运行 ASP.NET 进程。cpuMask 值指定一个位模式,指示有资格运行 ASP.NET 线程的 CPU。ASP.NET 为每个符合条件的 CPU 启动一个工作进程。如果 web Garden 设置为 false,则 cpuMask 被忽略,无论机器中的处理器数量如何,都只运行一个工作进程。如果 web Garden 设置为 true,则 ASP.NET 为 cpuMask 中对应于设置位数的每个 CPU 启动一个工作进程。cpuMask 的默认值为 0xffffffff。
以下是实现 Web 园的详细步骤:
• 点击“开始”,然后点击“运行”。
• 输入 calc.exe,然后点击“确定”。
• 转到“查看”菜单,点击“科学型”。
• 转到“查看”菜单,点击“二进制”。
• 使用零和一指定 ASP.NET 可以或不可以使用哪些处理器。
使用 1 表示您希望 ASP.NET 使用的处理器。使用 0 表示您不希望 ASP.NET 使用的处理器。例如,如果您希望一个四处理器计算机的前两个处理器用于 ASP.NET,则输入 1100。
• 在“查看”菜单上,点击“十进制”。记下十进制数。
• 在文本编辑器(如记事本)中打开 Web.config 或 machine.config 文件。Web.config 文件位于应用程序保存的文件夹中。
• 在 Web.config 文件中,将进程模型配置元素添加到 System.Web 元素下。在将 <process Model> 添加到 Web.config 文件之前,用户必须确保 Web.config 文件中 <process Model> 节的 allow Definition 属性设置为 everywhere。
• 添加并将进程模型元素的 web Garden 属性设置为 True。
• 添加并将进程模型元素的 cpuMask 属性设置为您计算的结果。
不要在数字前面加上 zerox,因为计算结果是一个十进制数。以下示例演示了配置为仅启用四处理器计算机的前两个处理器的进程模型元素。

<processModel
enable=”true”
webGarden=”true”
cpuMask=”12" />


保存 Web.config 文件。ASP.NET 应用程序将自动重启并仅使用指定的处理器。

(B) 网格布局和流式布局的主要区别是什么?


网格布局为页面上放置的控件提供绝对定位。在 Visual Basic 等富客户端开发环境中扎根的开发人员会发现,使用绝对定位开发页面更容易,因为他们可以将项目精确地放置在他们想要的位置。另一方面,流式布局则像传统的 HTML 一样,将项目向下放置在页面上。经验丰富的 Web 开发人员更喜欢这种方法,因为它生成的页面与更广泛的浏览器兼容。
如果您查看通过绝对定位创建的 HTML 代码,您会注意到大量的 DIV 标签。而在流式布局中,您会看到更多地使用 HTML 表格来定位元素,这与各种浏览器兼容。

(I) ASP.NET 中的跟踪 (trace) 和调试 (debug) 有什么区别?


调试和跟踪使您无需 VS.NET IDE 即可监控应用程序的错误和异常。在调试模式下,编译器会在可执行文件中插入一些调试代码。由于调试代码是可执行文件的一部分,它们与代码在同一线程上运行,因此它们不会给您代码的确切效率(因为它们在同一线程上运行)。因此,对于每个完整的可执行 DLL,您还会看到一个调试文件,如图“调试模式”所示。

图 7.10:- 调试模式


跟踪在调试模式和发布模式下都有效。使用跟踪而不是调试的主要优点是进行性能分析,这是调试无法完成的。跟踪在不同的线程上运行,因此它不会影响主代码线程。

注意:- 在何时使用跟踪以及何时使用调试方面,也存在根本性的思维差异。跟踪是获取程序执行信息的��程。另一方面,调试是查找代码中的错误。

(A) 如何在 ASP.NET 页面上启用跟踪?


要在 ASP.NET 页面上启用跟踪,我们需要将页面属性中的“trace”属性设置为 true,如图“正在跟踪”(Tracing in Action) 所示(图中编号为 1)。在后台代码中,我们可以使用 trace 对象放置跟踪,就像我们在页面加载时显示的那样(编号为 4)。我们使用了“trace.write”来显示我们的跟踪。您还可以看到被圈出的跟踪数据。2 和 3 显示了实际数据。您可以看到跟踪如何详细显示页面的跟踪信息,包括事件和执行时间。如果您将“trace”设置为 false,您将只看到实际显示内容,即“这是实际数据”。因此,您可以在不实际编译和上传新 DLL 到生产环境的情况下启用和禁用跟踪。

图 7.11:- 正在跟踪


上述示例仅在页面级别启用跟踪。要在应用程序级别启用跟踪,我们需要修改“web.config”文件并将“trace”标签设置为“enabled=true”。

<trace enabled="true" requestLimit="10" pageOutput="false" localOnly="true" />

(B) 实现调试和跟踪需要哪个命名空间?


Debug 和 Trace 类属于“System.Diagnostic”命名空间。

(A) 您能解释跟踪侦听器 (trace listener) 的概念吗?


“Tracelistener”是获取来自跟踪类的跟踪信息并将其输出到某个媒介的对象。例如,您可以从图“TraceListener”中看到它是如何监听跟踪对象并将其输出到 UI、文件或 Windows 事件日志的。有三种不同类型的“tracelistener”,第一种是“defaulttracelistener”(它将数据输出到 UI),第二种是“textwritertracelistener”(它输出到文件),最后一种是“Eventlogtracelistener”,它将相同的数据输出到 Windows 事件日志。

图 7.12:- TraceListener


以下是“textwritertracelistener”和“eventlogtracelistener”的代码片段。使用“textwritertracelistener”,我们将跟踪信息转发到“ErrorLog.txt”文件;在第二个片段中,我们使用“Eventlogtracelistener”将跟踪信息转发到 Windows 事件日志。

图 7.13:- 正在运行的 Tracelistener


(I) 什么是跟踪开关 (trace switches)?


跟踪开关帮助我们控制和管理项目的跟踪行为。有两种类型的跟踪开关:“BooleanSwitch”和“TraceSwitch”。BooleanSwitch,顾名思义,是一种开/关开关,可以启用(true)或禁用(false)。

图 7.14:- 跟踪开关


另一方面,“TraceSwitch”提供更多选项,而不仅仅是像“BooleanSwitch”那样的简单 true/false。使用 Level 属性为 TraceSwitch 对象启用跟踪。当我们把开关的 Level 属性设置为特定级别时,它将包含从该级别向下所有级别。例如,如果您将 TraceSwitch 的 Level 属性设置为 TraceLevel.Info,那么所有较低级别,从 TraceLevel.Error 到 TraceLevel.Warning,都将被考虑在内。以下是“TraceSwitch”对象中的各种级别。
Off → 不向 Trace Listeners 输出任何消息
Error → 仅向 Trace Listeners 输出错误消息
Warning → 向 Trace Listeners 输出错误和警告消息
Info → 向 Trace Listeners 输出信息、警告和错误消息
Verbose → 向 Trace Listeners 输出所有消息

TraceSwitch objSwitch = new TraceSwitch("TraceWarningandError", "Error in trace") ;
objSwitch.Level = TraceLevel.Warning ;

如需进一步阅读,请观看以下面试准备视频和分步视频系列。

© . All rights reserved.