如何从.NET客户端应用程序进入WCF Rest服务?

4
我正在使用Visual Studio 2010开发一个解决方案,其中包含一个托管在IIS(实际上是Cassini)中的WCF RESTful服务和一个原型ASP.NET MVC客户端。我已经让所有东西都能进行通信,但是在调试客户端时无法进入服务。
我有一个“服务代理”类,它由我的控制器用于与服务交互。服务代理使用以下代码进行实际的服务调用:
var factory = new WebChannelFactory<IServiceContract>("theEndpointConfigName");
var channel = factory.CreateChannel();

var result = channel.CallTheService();

我可以在最后一行设置断点,但按下 F11 没有将我步入服务,这与我的预期不符。
这两个项目存在于同一个解决方案中,我已经验证了服务是否被正确调用,通过修改响应数据。
我错过了什么吗?

你是否将VS附加到IIS工作进程? - Ladislav Mrnka
我以前在同一解决方案中使用WCF服务时从未遇到过这种情况。这是因为该服务使用REST的区别吗? - SonOfPirate
3个回答

3

Visual Studio调试器无法跨越进程边界。您只能附加到客户端进程或服务器进程,但不能同时附加。

以下是一些建议:

  • 首先调试客户端代码。如果错误不在客户端代码中,则再次重现错误,但调试服务代码而不是客户端代码。
  • 为调试目的创建两个单独的解决方案,一个仅包含客户端项目,另一个仅包含服务项目。然后,您可以在两个IDE实例中并排运行这两个解决方案。
  • 添加单元测试。如果“客户端”是一个简单的单元测试方法而不是完整的客户端,则更容易在服务中找到错误。

不幸的是,这应该是一个快速而简单的概念验证,所以我目前并没有遵循TDD。 如果我们真正开始解决方案的开发,我会这么做。 我不明白的是,在使用WCF和SOAP时,我调用服务操作时没有任何问题。有问题的是REST吗? - SonOfPirate
我也在考虑未来。当解决问题时,能够进入服务是一个不错的功能。 - SonOfPirate
说实话,我从来没有在服务开发的“快而脏”的阶段浪费时间,我总是直接使用IIS并在第一天就放入单元测试,所以对于那方面我无法提供任何建议,抱歉。 - Christian Hayter

2
我其实是偶然发现了答案。我要感谢Christian无意中引导我朝着正确的方向思考。你关于调试器只能连接其中一个进程而非两个的陈述让我开始思考。我想到我的解决方案中只将Web项目设置为唯一的启动项目。出于好奇,我决定尝试将WCF服务应用程序添加到启动列表中。哇!就这样搞定了!
所以现在我有了两个项目同时启动。我已经更改了WCF服务应用程序中的设置,使其不会在启动时显示页面。现在一切都按照我的预期运行。
感谢你引导我朝着正确的方向前进!

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接