WCF无法再进入本地托管的服务 - 为什么不呢?

时间:2009-08-20 16:00:52

标签: wcf debugging

我在同一解决方案中有一个WCF测试服务和一个测试客户端。该服务配置为在localhost上运行(即“http://localhost:8731/Design_Time_Addresses/MyService/Service”)我运行客户端应用程序,它正确调用该服务并获得正确的答案。我已通过日志验证它确实运行了我的机器本地服务。   但是,我无法在运行客户端时调试服务。 WCF应该只允许单步执行,但服务上没有断点,并且进入服务调用也不起作用。有没有人见过这个?

我已经检查了所有明显的内容,例如“生成的PDB文件是什么?” - 是的。如果我自己运行服务项目,然后用一些测试客户端点击它,断点就会被正确命中。因此调试服务工作。我甚至可以明确地“附加到远程进程”并以这种方式调试服务。但是WCF不会自动从客户端步入服务。

9 个答案:

答案 0 :(得分:21)

我也遇到过这种情况。奇怪的是,在我对构建配置进行更改(从x64到x86)后,似乎发生了这种情况。以下是我能够解决的问题:

  1. 右键单击解决方案,选择“属性”。
  2. 在“启动项目”下,从“单个启动项目”切换到“多个启动项目”。
  3. 将操作设置为WCF项目的“开始”。
  4. 即使我在本地IIS服务器(而不是VS开发服务器)中托管项目,这也解决了它,这有点令人费解。我怀疑将项目设置为“Start”也会导致VS附加到进程进行调试。

    http://msdn.microsoft.com/en-us/library/bb157685.aspx

答案 1 :(得分:4)

对于Visual Studio多配置:

在解决方案的属性页中,确保将Web服务的“配置”设置为“调试”,而不是“发布”。

答案 2 :(得分:3)

您是否在Visual Studio中使用自动WCF服务托管功能?您可以通过打开WCF服务项目的项目属性并导航到WCF选项选项卡来检查这一点。在调试同一解决方案中的另一个项目时启动WCF服务主机复选框是否已选中?如果是,那么这就解释了问题。

当您运行客户端时,会创建一个单独的进程来自动托管您的WCF服务。因为它是一个单独的过程,所以在调试客户端时,您将无法“介入”它。您必须运行两个单独的调试会话,一个用于您的服务,另一个用于您的客户。

一种简单的方法是在服务的启动逻辑中调用System.Diagnostics.Debugger.Break()。当您的服务由WCF服务主机自动启动时,系统将提示您调试它,允许您为其调试会话打开第二个Visual Studio实例。

答案 3 :(得分:1)

此外,当使用VS调试并将其附加到w3wp.exe进程并且​​您具有除http:80:*之外的特定端口绑定时,您必须具有调试> VS中的Web设置为站点并且端口http正在运行。

答案 4 :(得分:1)

不进入WCF服务的另一个原因可能是传递给WCF方法的数据大小。

例如,我传递了一个大小为1000的dobule数组,我看到了一个错误的请求错误(400),看看该方法是如何运行的。我将大小设置为500,现在它调试了WCF。

答案 5 :(得分:1)

在我的情况下,我使用Release配置发布了它。你需要在这里选择Debug。

enter image description here

答案 6 :(得分:0)

我有类似的问题。由 WCF服务主机托管的WCF,由 WCF测试客户端测试的请求。 我的问题是由构建配置名称中的空格引起的。只要我使用没有空格的配置名称,就可以进行debbuging。

我猜真正的问题是构建输出文件夹以配置名称命名的文件夹结尾。

答案 7 :(得分:0)

@msulis - 是的,谢谢,这为我解决了这个问题。我最近也改变了,目标CPU从任何到x86。我出于某种原因无法直接回复你的消息,如果这是一个“答案”,我会道歉。

答案 8 :(得分:0)

是的,我遇到了同样的问题,WCF使用了另一个进程。

最后,我找到了一种方法,首先启动WCF服务的新实例(debug->启动新实例),然后启动客户端,WCF服务中的断点点击!

相关问题