ASP.NET 的疑难解答

文章翻译 文章翻译
文章编号: 891032 - 查看本文应用于的产品
ASP.net 支持文章专栏: 疑难解答 ASP.NET
若要自定义您的需要此列 我们想要邀请您提交您的想法有关您感兴趣的主题以及您想要查看的问题解决在将来的知识库文章和支持语音列。您可以提交您的想法和使用 Ask For It 窗体的反馈。还有在窗体在此栏的底部的链接
展开全部 | 关闭全部

本文内容

简介

再次你好,2004 年十一月版支持文章专栏的欢迎。我想要感谢 Jim Cheshire,支持工程师此处在 Microsoft 支持 ASP.net 为他的贡献。Jim 具有很好的想法,支持语音列,且需要共享它们。在下一次的几个月查找 Jim 的贡献,与往常一样向我们发送您的建议为将来的列。感谢您 Jim !

Jim 已被 Microsoft 六年上使用 FrontPage、 VB,和 ASP.net 团队。在此期间他有 MSDN 上, 为 Office 开发人员中心编写的他是在 FrontPage,特殊版使用 Microsoft Office FrontPage 2003 上的简介册的作者。Jim 还具有一个网站他提供了可用的加载项的 FrontPage 以使 Web 开发人员能够利用 Microsoft 产品进行。下面是该网站地址:
http://www.jimcosoftware.com
请拉向上一个椅子,启动在足球鞋和通过我们的专栏所有有关诊断 ASP.NET,读记住您可以提交您的想法,我们使用包含在每一列中的"ASK FOR IT"链接我们发布。

Jeremy

ASP.NET 的疑难解答

您已经看到了影片 Shrek 吗?到 Shrek 的星形是影片的一个的 ogre 起来卫生习惯用一个竞销绿色动物。在该的电影的早期阶段 Shrek proclaims ogres 的复杂性通过说 ogres 就像 onions。它们具有图层。

ASP.NET 得就像一个 ogre。它有多个层--Web 客户端、 任何中间设备 (如 Web 的代理服务器服务器和网络它的上,而任何其他资源应用程序合并在一起。所有这些图层使 ASP.NET 难以进行故障排除除非您知道哪些工具使用以及如何正确地使用该工具。

使我自己过时,这一系列将阐述如何使用一些工具的风险我们使用在 PSS 中解决的问题。我可以探讨如何使用一些确实很棒的工具,如:
  • 网络监视器
  • fiddler
  • Filemon / Regmon
  • 对于 Windows (Windbg) 的调试工具
  • SOS (用于调试托管的代码 Windbg 扩展名)
  • DBGClr
我 won’t 进入了解有关使用这些的工具的详细信息,但我将为您提供坚实的基础上使用这些工具,以便您可以向下钻取到的许多可能会遇到的问题的根本原因。

嗅探器

网络嗅探器将处理这一系列的第一部分。 let’s 研究权限中。

示例问题:

您有一个 ASP.NET 应用程序,可以使用 Windows 集成身份验证,并且具有匿名已关闭。您的用户的一个报告它们将不能访问该网站。系统而是,他们是反复提示您输入用户名和密码。您认为该权限是适合 该用户。

这种问题进行故障排除使用网络嗅探器是最理想的候选。窃探器将使您可以确定客户端发送到服务器的身份验证信息。 在 Microsoft,我们使用网络嗅探器是网络监视器。

网络监视器

您可以从下面的 Microsoft FTP 站点下载时间 bombed 版本的网络监视器:
ftp://ftp.microsoft.com/PSS/Tools/Netmon/Netmon2.zip
跟踪 对该 Zip 文件密码。安装网络监视器后,您可以找到它,它通过单击 管理工具,然后单击 $ 网络分析工具
选择要捕获网络接口
当您第一次启动网络监视器时,的首先您必须执行的是选择要在图 1 所示的对话框中使用的网卡。
收起这个图片展开这个图片
Figure 1: Choosing a network in Network
		  Monitor

图 1: 在 $ 网络监视器中选择一个网络

请注意图 1 中所选的接口的拨号连接或 VPN 适配器接口的属性中所示。在大多数的情况中要选择一种拨号或 VPN 连接以外的其他接口。选择了使用 VPN 的屏幕抓图 don’t 要选择,因为我希望您清楚地看到如何将被标识适配器。再一次在几乎所有的情况下选择所需的适配器是 doesn’t 看起来像一个图示中的图 1 的一个。

如果希望更改您捕获的网络卡可以访问为此,通过单击 捕获 菜单上的 网络 选项对话框。
设置缓冲区大小
网络监视器有 1 MB 的默认捕获缓冲区。 这意味着它收集 1 MB 的网络数据后,它启动覆盖跟踪。在很多的情况中您可能希望增加该缓冲区。要做到这一点,请单击 捕获,然后单击 缓冲区设置。 这将显示 捕获缓冲区设置 对话框,在其中您可以增加缓冲区的大小。若要指定所需的大小取决于对多少网络通信量,您会看到您的网络上。对于要生成您感兴趣立即后开始捕获帧的问题,2 或 3 MB 的缓冲区应为多个足够。

您可以注意在 捕获缓冲区设置 对话框也可以更改帧大小。这是在您要捕获只需发送的邮件头的情况下非常有用。通过减小帧大小,也可以保存在缓冲区中的一些空间来仍捕获您需要在标头。我 won’t 上使用本文中的转到明细数据。
开始捕获
现在,您获得您的缓冲区的一组,您是准备好开始捕获数据。您可以开始捕获几种不同的方式:
  • 键盘上按 F10。
  • 单击 捕获,然后从菜单中单击 开始
  • 单击 (单击此按钮显示为播放按钮) 工具栏上的 开始捕获 按钮。
捕获使用网络监视器的数据包,您可以看到该米移动和更改,统计信息,如图 2 中所示。如果您 don’t 看到任何内容发生时捕获,您可能需要更改捕获的网卡。
收起这个图片展开这个图片
Figure 2: Network Monitor while capturing
		  packets

图 2: 网络监视器捕获的数据包时

您启动网络监视器中捕获后,重现此问题,您需要捕获,然后停止捕获,通过单击 停止 按钮,单击 捕获,然后单击 停止 的网络监视器中或通过在键盘上按 F11。现在,您就可以检查被捕获的数据。

注意网络监视器捕获通过缆线转的数据。 因此,您通常无法捕获的请求对您的 Web 应用程序通过在控制台上浏览。在某些种情况下浏览使用您的 IP 地址或完全合格的域名将允许您捕获本地计算机上。
检查捕获的数据
停止捕获后,您可以通过单击 捕获,然后单击 显示捕获的数据,或通过在键盘上按 f12 键查看捕获的数据。默认状态下,您将看到如图 3 所示,您被捕获时跨线出现的所有数据。
收起这个图片展开这个图片
Figure 3: Captured data in Network
		  Monitor

图 3: 捕获网络监视器中的数据

在这种情况下会有益能够只是查看 HTTP 数据包。最容易实现: 筛选以显示 HTTP 协议捕获的数据。若要筛选捕获的数据,请单击 捕获,然后单击 筛选,或您键盘上按 f8 键或单击工具栏上的按钮,如下所示为漏斗。

显示筛选程序 对话框中双击该 协议 = = Any 可显示 表达式 对话框,如图 4 所示的筛选器。
收起这个图片展开这个图片
Figure 4: The Expression dialog box
		  provides powerful filtering capabilities

图 4: 在表达式对话框提供了功能强大的筛选功能

默认状态下,网络监视器显示所有协议。若要仅显示 HTTP 协议单击 全部禁用,双击以选择它,HTTP 协议,然后单击 确定。网络监视器将显示仅在 HTTP 协议。

注意您可以筛选网络监视器捕获,以便它只捕获帧符合筛选器设置的前。在大多数的情况中希望筛选后捕获。

筛选捕获的数据包,以便显示 HTTP 协议后, 网络监视器将显示每个帧的捕获的 HTTP 数据。通过双击图文框中,您可以查看该数据包的详细的信息。在我们处理的该情况下,我们正在尝试确定客户端是否已发送到 Web 服务器的任何身份验证信息。图 5 所示在捕获显示从 ASP.NET 页的 GET 请求响应。请注意在 Web 服务器已重新与一个 401 状态代码,指示至 Web 页访问已被拒绝响应。
收起这个图片展开这个图片
Figure 5: Network Monitor showing an
		  “Access Denied” response when authentication is required

图 5: 网络监视器显示了拒绝访问的响应时要求身份验证的情况

通过查看 WWW 身份验证标头中可以看到图 5 Web 服务器接受 Kerberos (协商) 和 NTLM 身份验证。因此,我们预期客户端将在此处发送身份验证信息会自动在访问被拒绝消息后的,我们看到。
序列号
若要为数据包图 5 所示的客户端的响应,我们需要看一下此响应中的序号。序列号会经常引起误解的网络监视器进行审核的概念跟踪。它们是键以了解事情发生的顺序。

图 5 中中间窗格中,您可以注意到 HTTP 协议已被扩展,以显示所有的 HTTP 标头。正上方 HTTP 协议是 TCP 协议,您可以看到序列号和肯定应答编号作为 TCP 段的一部分。序列号 (由 TCP 数据包中的 seq) 提供了一种方法来标识特定的 TCP 段。每个 TCP 序列应该将伴随着已确认,或的该序列的 ()。

下面的代码段从 HTTP GET 请求的跟踪:
11 4294967263.4294633595 LOCAL 00045A420DBC HTTP GET Request 
(from client using port 3134) DADATOP 192.168.0.4 IP 
TCP: .AP..., len: 402, seq:3410290480-3410290882, ack:1947093623, win:17520, src: 3134 dst:  80 
注意结束的序列号是 3410290882。因此,可以服务器的响应,就必须寻找确认该序列的框架。 也就您正在寻找的 3410290882 的肯定应答的响应。下面是该框架:
12 4294967263.4294636605 00045A420DBC LOCAL HTTP Response (to client using port 3134) 192.168.0.4 DADATOP IP 
TCP: .A...., len: 1460, seq:1947093623-1947095083, ack:3410290882, win:65133, src:  80 dst: 3134
这些数字非常重要,因为有响应在网络监视器跟踪请求之前,将会时的时间。要确保数据包的顺序的唯一方法是检查各段使用这些数字。

由于我们正在查找该跟踪,如果客户端发送身份验证信息,请参阅通过,我们可以使用 TCP 段来跟踪 HTTP GET 请求和从服务器响应。下面是从该框架从客户端发送身份验证信息的代码段:
23 4294967263.4294641621 LOCAL 00045A420DBC HTTP GET Request (from client using port 3135) 192.168.0.2 192.168.0.4 IP 
HTTP: GET Request (from client using port 3135)
  HTTP: Request Method = GET
  HTTP: Uniform Resource Identifier = /webapplication1/webform1.aspx
  HTTP: Protocol Version = HTTP/1.1
  HTTP: Accept = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.
  HTTP: Accept-Language = en-us
  HTTP: Accept-Encoding = gzip, deflate
  HTTP: User-Agent = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 
  HTTP: Host = alien
  HTTP: Connection = Keep-Alive
  HTTP: Authorization = Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFASgKAAAA
44 77 3D 3D 0D 0A 0D 0A         AAADw==....   
什么不会这样告诉我们?我们可以看到授权标头设置为"协商",我们可以看到该标头中发送的字符的长字符串。此响应在客户端和服务器协商的 NTLM 连接告诉我们。我们知道的 NTLM 身份验证用此处因为第一个字符是一个"t"。它是否"Y"会 Kerberos。标头设置为协商代替"NTLM。这并不意味着它将使用 Kerberos 或 NTLM,但是,它将协商该授权方法,并首先尝试 Kerberos,如果可以。如果它不能使用 Kerberos,则它将使用 NTLM。

图 6 是框架,以便您可以看到发送身份验证信息的位置,如上所示的屏幕抓图。请注意,这样我们可以看到每个标头的详细信息,已被扩展 HTTP 标头,中间框架中。
收起这个图片展开这个图片
Figure 6: The
		  frame containing authentication information

图 6: 包含身份验证信息的框架

此框架中的信息告知客户端是大多数明确发送身份验证信息。如果用户在此点获取被拒绝访问,则要么是用户没有具有该资源的权限,或者是因为身份验证信息在某一时刻跨网络更改。
若要筛选的另一种方法
在很多的情况中您可能会被诊断了大量的通信的服务器。在这种情况下您可能会看到大量的 HTTP 帧,则可能很难找到正确的。通过多个筛选表达式您很容易得到从右到正确的帧。

单击 筛选 按钮,或在您以调出 显示筛选程序 对话框的键盘上按 f8 键。在右侧单击要添加新的表达式的 表达式。有两个不同的筛选器可能要在这种情况下使用: 由 IP 地址和 $ 通过 HTTP 状态代码的筛选器的筛选器。

若要进行 IP 地址筛选单击 属性 选项卡,然后向下滚动在左窗格中,直到您看到 IP。展开 IP,然后向下滚动,直到看到 源地址。选择 = = 关系,,然后输入 IP 地址的客户端计算机如图 7 所示。执行此操作后,您将仅看到来自您输入的 IP 地址的帧。
收起这个图片展开这个图片
Figure 7: Filtering by IP
		  Address

图 7: 按 IP 地址筛选

它需要特别注意 IP 地址的很多时候可能不是要筛选跟踪最佳的属性。通常用户会被命中通过路由器或防火墙的 Web 服务器。在这种情况下,IP 地址将通常是路由器或防火墙并不是客户端的 IP 地址。

您还可以通过 HTTP 状态代码进行筛选。如果希望快速定位到客户端发送一个 401 的位置在框架中,您可以筛选上 401 HTTP 状态代码。若要执行此操作,选择 HTTP 协议: 属性 列表中并将其展开。向下,滚动然后单击 状态代码。选择 = = 关系,单击 十进制 单选按钮 (重要)、 字段中输入 401,如图 8 所示,然后单击 确定。网络监视器将显示那些只帧发送 401 状态代码的位置,如图 8 所示。
收起这个图片展开这个图片
Figure 8: Filtering by HTTP status
		  code

图 8: 通过 HTTP 状态代码筛选
位于图文框位置发送该 401 后,然后可以关闭筛选器键盘上按 F7。将仍然被加亮将 401 被发送,其中的框架,然后可以检查客户端的响应将 401 周围的帧。

fiddler – 调试代理服务器的 HTTP

如果您在进行故障排除在客户端计算机上浏览 Internet Explorer 从,您可以使用 Fiddler (如图 9 所示) 而不是网络监视器捕获从客户端发送 HTTP 信息。fiddler 捕获只 HTTP 数据包,并将直接集成到 Internet Explorer。
收起这个图片展开这个图片
Figure 9: Fiddler

图 9: Fiddler

图 9 中可以看到服务器将 401 响应,然后,您可以看到 协商 标头 (突出显示) 在响应客户端。在这种情况下客户端将发送身份验证 (这是此问题不相关),但我们可以清楚地看到在客户端通过发送 Kerberos 票证的其部分后,将发生运行时错误。

您可以从以下 Web 站点下载 Fiddler:
http://www.fiddlertool.com.

内容的下一个?

使用网络监视器或 $ Fiddler 您可以经常排除该客户机的身份验证失败的问题。我们可以如何使用 Filemon 和从 SysInternals Regmon 转下一次的月份。这些工具是非常有用,在解决文件系统上的权限问题,并在注册表中。
与往常一样随意提交所需满足将来的列中或在使用 Ask For It 窗体的知识库中的主题的相关想法。

属性

文章编号: 891032 - 最后修改: 2008年1月24日 - 修订: 3.1
这篇文章中的信息适用于:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
关键字:?
kbmt kbhowto kbasp KB891032 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 891032
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com