打印本文 打印本文 关闭窗口 关闭窗口
ASP.NET调试问题与解决
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1888  更新时间:2009/4/23 10:39:24  文章录入:mintao  责任编辑:mintao
返回页首

因果性调试:Web 服务客户端和 Web 服务之间的步骤

无法从 Web 服务客户端到 Web 服务设置调试

默认设置不允许从 Web 服务客户端进入 Web 服务。它的运行方式类似 step-over。

ASPNET 辅助进程(aspnet_wp.exe 或 w3wp.exe)在“aspnet”或“network service”用户帐户之下运行,而这些帐户没有通过 DCOM 访问 MDM 的权限。因此,需要将这些帐户添加到 Debugger Users 组中。

启用 Web 服务模拟后,无法再使用因果性步骤。

使用“web.config”为 Web 服务启用模拟时,不能从 Web 服务客户端代码进入 Web 服务代码。因为,它的运行方式类似于 step over。

您需要执行以下操作来更正客户端和服务之间的步骤。

关闭 IIS 中的 Anonymous access

更改客户端代码,将凭据设置为 Web 服务,如下所示:

Service1 obj = new Service1();

obj.Credentials = System.Net.CredentialCache.DefaultCredentials;

在此之后,您将能够从客户端进入 Web 服务。

这些操作是必需的,因为当您进入 Web 服务时,某些 .NET Framework 组件需要使用系统级调试器组件 (MDM) 来共同创建它。如果不能提供正确的凭据,则此步骤将失败。如果没有这些正确的凭据,“step into”的运行将类似于“step over”。

调试器挂起

如果 Web 服务客户端代码在 STA (Single Thread Apartment) 模型中运行,并且它在等待异步调用完成,如下所示:

Service1 obj = new Service1(); 
System.IAsyncResult ar = obj.BeginHelloWorld(new System.AsyncCallback(Class1.Handle),obj); 
while(ar.IsCompleted != true) 
{ 
  System.Threading.Thread.Sleep(1000); 
}

则调试器将挂起。发生此挂起操作,原因在于调试器中的代码已锁定一个调试器组件。解决方案 1 是更改代码以使用与事件或 mutex 同步的线程。另一个解决方案是注销 csm.dll。第二个解决方案禁用 causality 步骤(从 Web 服务客户端代码到 Web 服务方法的步骤)。您可能需要手动连接 aspnet_wp.exe 才能调试 Web 服务。

返回页首返回页首

远程调试

无法查看远程机器上的任何进程

确保在远程机器上安装了 Remote full debug 设置,并且您是 Debugger Users 组的成员。

RPC 问题而无法连接到远程机器

以下信息摘自 Mike Clay 撰写的 KB 文章。

如果通过“Processes”对话框连接到远程机器上时看到以下错误消息:

Error while trying to run project: Unable to start debugging on the 
web server. Not enough storage is available to complete this operation.

或者在进行 ASP.NET 调试期间看到这一消息:

Error while trying to run project: Unable to start debugging on the web
server. Unable to map the debug start page URL to a machine name.

则确保 RPC 在您的机器与远程机器之间正确运行。下面的行为可能导致 RPC 问题:

通过防火墙进行调试。Microsoft 不建议或支持通过防火墙的远程 ASP.NET 调试。解决此问题最好的方式是,使用“终端服务”登录远程服务器并在本地进行调试。

RPC 的一种常见故障是无力解析远程机器名。RPC 依靠名称解析在计算机之间通信。如果未能将远程服务器机器名解析为正确的 IP 地址,则可能发生错误。

RPC 通信只能单向流动,另一个方向却不行。RPC 通信必须能够从用于调试的机器到达远程服务器,并从远程服务器返回用于调试的机器,这样才能成功进行远程调试。确保以双向方式启用 RPC 通信。

要分析 RPC,可以使用 RPCPing 工具。

远程调试工作组中的机器失败

当您的两台 Windows XP Pro 机器都不在域中但在工作组中时,将发生这种情况。在它们之间进行远程调试时,您根本无法访问远程机器。

在工作组环境中,您需要确保两台机器具有相同的用户帐户名和相同的密码。否则,DCOM 进行身份验证时将失败。

另外,在 Windows XP Pro 上,将 Sharing and security model for local accounts 的默认安全设置设置为现在允许共享。下面是更改此设置的步骤:

1.

运行管理员工具中的 Local Security Settings

2.

选择 Security settings\Local policies\Security 选项。

3.

Network access : Sharing and Security model for local accountsGuest only - local users authenticate as Guest 更改为 Classic - local users authenticate as themselves

4.

重新启动计算机。

应该将此更改应用于进行远程调试的两台机器。

更改设置后,即可使用同一名称的用户帐户在两台机器上进行远程调试。请确保每台机器上的用户帐户都具有密码。在某些情况下,没有实际密码机器不能运行。

然而,因为更改了安全模型的默认设置,所以可能公开下面的内容:

意外的文件共享

意外的 DCOM 组件共享。

在进行这一更改之前,从远程机器到您的机器的任何种类的连接都是以 Guest 身份进行的;但更改后,他/她即可接受使用本地用户帐户的身份验证。因此,在调试案例中,如果将一个文件夹或 DCOM 对象共享出来,其他机器上的任何匹配用户(具有相同用户名和相同密码)都可能可以访问您的共享对象。

我极力建议,如果您要使用这一变通方法,则请确保所有用户帐户都具有强密码,否则应该设置一个网络孤岛来调试机器,以防止恶意攻击。

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口