调试WCF服务

4

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

在这个WinForms应用程序中,我已经在app.config中正确引用了本地主机上的服务,现在我想启动WCF服务的一个实例,以便可以设置断点并逐步执行它。

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

enter image description here

我应该做什么?


你是如何托管这个服务的?在IIS下还是作为Windows服务? - Jeff
这是一个 Windows 服务,不是 IIS。 - slandau
你需要附加到它。调试 -> 附加到进程 - ppiotrowicz
4个回答

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();
  }
}

这篇文章展示了如何在Windows服务中托管。我建议添加

Debugger.Launch();

将第一行代码添加到OnStart方法中,以便在服务启动时附加调试器。这将有助于调试任何启动问题。否则,您可以从调试菜单中选择AttachToProcess并附加到正在运行的Windows服务。
您需要添加using System.Diagnostics来使用Debugger.Launch();方法。

1

您必须将您正在构建的服务本地作为Windows服务进行安装,然后附加到它。


1

服务是在IIS下运行还是自主托管的?无论哪种方式,一旦服务启动,您都可以通过进入“调试->附加进程”来连接服务。

如果在IIS下运行,您需要查找w3wp.exe(IIS 7)进程。请注意,要附加到此进程,您很可能需要以管理员身份运行VS。如果您正在运行旧版IIS,则该进程称为类似aspnet_XXX的名称。

一旦连接成功,您就可以设置断点并按需要进行调试。


0

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

如果您想要使其易于(并且没有设计基础结构问题),可以从VS中运行/调试它,那么将其设置为WCF服务应用程序项目,该项目将在网站中托管服务: https://dl-web.dropbox.com/get/Photos/web/wcfserviceapp.png?w=44e8c6ed

这样,您就可以在其解决方案中运行服务,然后从其解决方案中运行winforms应用程序,然后可以转到菜单“调试/附加到进程...”,并查找服务URL和端口:https://dl-web.dropbox.com/get/Photos/web/debugattachtoprocess.png?w=8c917c28

我希望这有所帮助,如果没有,请详细说明您拥有哪些项目类型,您的解决方案以及其他有用信息,以便更清楚地了解情况。


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