调试到WCF服务

时间:2011-07-29 14:17:52

标签: c# .net wcf visual-studio-2010 soa

所以我们在SOA架构中运行。我有一个服务,我正在尝试调试来自不同解决方案中的WinForms应用程序的调用。

在这个winforms应用程序中,我已经在app.config中正确引用了localhost上的服务,现在我想启动一个WCF服务的实例,这样我就可以设置一个断点并逐步完成它。

当我进入服务时,我右键单击项目,转到属性,然后在“开始操作”下,选择服务bin / debug /目录中的.exe文件。然后我保存,编译并按F5启动它的实例。我收到这个错误:

enter image description here

我该怎么办?

4 个答案:

答案 0 :(得分:6)

您必须在一个进程中托管该服务,然后从那里进行调试。这可以像编写控制台应用程序来托管服务,或编写Windows服务来托管它,或Windows窗体应用程序,或在IIS中托管它一样简单。

您可以在控制台应用中托管,如下所示:

static void Main(string[] args)
{
  using (ServiceHost host = new ServiceHost(typeof(YourNamespace.YourServiceInterface)))
  {
    host.AddServiceEndpoint(typeof(
YourNamespace.YourServiceInterface), new NetTcpBinding(), "net.tcp://localhost:9000/YourService");
    host.Open();

    Console.WriteLine("Press <Enter> to terminate the Host 
application.");
    Console.WriteLine();
    Console.ReadLine();
  }
}

this article显示了如何在Windows服务中托管。我建议添加

Debugger.Launch();

作为OnStart方法的第一行,以便您可以在服务启动时附加调试器。这将有助于调试任何启动问题。否则,您只需从Debug菜单中选择AttachToProcess并附加到正在运行的Windows服务。

您需要添加using System.Diagnostics才能使用Debugger.Launch();方法

答案 1 :(得分:1)

您必须将本地构建的服务作为Windows服务安装,然后附加到该服务。

答案 2 :(得分:1)

服务是在IIS下运行还是自托管?无论哪种方式,一旦服务运行,您可以通过进入Debug-&gt; Attach Process。

来附加它

如果在IIS下运行,则需要查找w3wp.exe(IIS 7)进程。请注意,要附加到此进程,您很可能必须以管理员身份运行VS.如果您运行的是旧版本的IIS,则会调用此过程,如aspnet_XXX。

连接后,您可以根据需要输入断点并进行调试。

答案 3 :(得分:0)

嗯,当您尝试运行/调试类库项目时出现错误,因此请检查您的服务项目是不是那种类型。

如果您希望从VS中运行/调试变得简单(并且没有设计基础结构问题),那么将其作为WCF服务应用程序项目,在项目中托管服务:https://dl-web.dropbox.com/get/Photos/web/wcfserviceapp.png?w=44e8c6ed

这样您可以在其解决方案中运行该服务,然后从其解决方案运行winforms应用程序,然后您可以转到菜单“Debug / Attach to process ...”并查找服务URL和端口:{{ 3}}

我希望这有帮助,如果没有请详细说明你有什么样的项目,你的解决方案和其他有用的信息。