2009-11-04 37 views
3

我有两个Visual Studio解决方案的源代码。一个是调用WCF服务的网站,另一个是编译为DLL的WCF服务。该网站有WCF服务的二进制DLL作为参考。调试WCF服务库 - 如何“运行”它?

问题出在这里:当我运行网站时,一个未捕获的异常从WCF服务开始。

如何在Visual Studio中运行WCF服务,以便我可以在WCF服务中设置断点?服务项目设置为编译成DLL,我无法调试带断点的DLL。在Visual Studio的一次实例中“运行”服务并在另一个实例中触发运行该网站的异常时需要做些什么?

这是我第一次接触到WCF。

PS:我试着将WCF服务的项目添加到网站的解决方案中,并得到一些关于如何因为WCF服务具有依赖关系而无法调试它的错误,所以看起来并不像选项。

回答

5

您可以使用WcfSvcHost.exe来托管您的服务并对其进行调试。你的服务如何托管?您也可以在运行时直接附加到主机进程,这可能是更好的解决方案,因为问题可能是环境问题。

+0

+1有点不为人所知,而且经常被忽略的宝石,的确如此! – 2009-11-04 05:52:48

3

您需要一个主机为您服务。在WCF中,你有两个选择:

  • 主机在IIS/WAS(对于IIS6,只适用于HTTP绑定; IIS7/WAS支持所有绑定)
  • 自托管在一个控制台应用程序,Winforms应用程序,NT服务

或者正如Andrew已经提到的 - 为了测试/调试目的,使用通用的WcfSvcHost.exe应用程序,该应用程序基本上可以在控制台应用程序中自行托管。

如果你想拥有自己的小主人,您可以将项目添加到您的解决方案,使之成为“Windows控制台应用程序”,添加到您的服务库项目的引用,然后基本上有这样的代码:

static void Main(string[] args) 
    { 
     using (ServiceHost host = new ServiceHost(typeof(YourWCFService))) 
     { 
      host.Open(); 
      Console.WriteLine("Service host running......"); 

      Console.ReadLine(); 

      host.Close(); 
     } 
    } 

这将创建一个ServiceHost实例,在其中添加您的服务类,并打开主机 - 现在它已准备好接收来电。它也需要一些配置,以了解如何以及在哪里倾听请求 - 但基本上是这样。

Marc

+0

我为此+1了,因为WcfServiceHost不适用于每个绑定。 IE wsDualHttpBinding – 2013-09-13 22:40:50

+0

我试图自己托管我的wcf服务库,它在我运行在发行版中时超时,但在调试任何想法可能是什么原因呢? – ZoomVirus 2014-10-08 09:19:36