在此之后,您将能够从客户端进入 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 accounts 从 Guest only - local users authenticate as Guest 更改为 Classic - local users authenticate as themselves。 |
4. | 重新启动计算机。 |
应该将此更改应用于进行远程调试的两台机器。
更改设置后,即可使用同一名称的用户帐户在两台机器上进行远程调试。请确保每台机器上的用户帐户都具有密码。在某些情况下,没有实际密码机器不能运行。
然而,因为更改了安全模型的默认设置,所以可能公开下面的内容:
| • | 意外的文件共享 |
| • | 意外的 DCOM 组件共享。 |