我在同一解决方案中有一个WCF测试服务和一个测试客户端。该服务配置为在localhost上运行(即“http://localhost:8731/Design_Time_Addresses/MyService/Service”)我运行客户端应用程序,它正确调用该服务并获得正确的答案。我已通过日志验证它确实运行了我的机器本地服务。 但是,我无法在运行客户端时调试服务。 WCF应该只允许单步执行,但服务上没有断点,并且进入服务调用也不起作用。有没有人见过这个?
我已经检查了所有明显的内容,例如“生成的PDB文件是什么?” - 是的。如果我自己运行服务项目,然后用一些测试客户端点击它,断点就会被正确命中。因此调试服务工作。我甚至可以明确地“附加到远程进程”并以这种方式调试服务。但是WCF不会自动从客户端步入服务。
答案 0 :(得分:21)
我也遇到过这种情况。奇怪的是,在我对构建配置进行更改(从x64到x86)后,似乎发生了这种情况。以下是我能够解决的问题:
即使我在本地IIS服务器(而不是VS开发服务器)中托管项目,这也解决了它,这有点令人费解。我怀疑将项目设置为“Start”也会导致VS附加到进程进行调试。
答案 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)
答案 6 :(得分:0)
我有类似的问题。由 WCF服务主机托管的WCF,由 WCF测试客户端测试的请求。 我的问题是由构建配置名称中的空格引起的。只要我使用没有空格的配置名称,就可以进行debbuging。
我猜真正的问题是构建输出文件夹以配置名称命名的文件夹结尾。
答案 7 :(得分:0)
@msulis - 是的,谢谢,这为我解决了这个问题。我最近也改变了,目标CPU从任何到x86。我出于某种原因无法直接回复你的消息,如果这是一个“答案”,我会道歉。
答案 8 :(得分:0)
是的,我遇到了同样的问题,WCF使用了另一个进程。
最后,我找到了一种方法,首先启动WCF服务的新实例(debug->启动新实例),然后启动客户端,WCF服务中的断点点击!