【问题标题】:how to debug a program that calls a WCF Service,如何调试调用 WCF 服务的程序,
【发布时间】:2013-11-11 23:28:09
【问题描述】:

我正在使用 Visual Studio 2010。我有一个非常简单的 asp.net 网页,我浏览并上传了一个 xml 文件,现在我有 2 个文本框。在左边的框中,我显示了原始的 xml 内容,然后,我想调用 WCF 服务,使用 xml 作为输入,并在右边的框中显示返回的结果。

现在,我不断收到“消息服务队列不可用”的错误消息。我已经通过谷歌搜索设置了消息队列服务的系统帐号。

所以现在,我需要调试服务。在四处搜索之后,我认为附加到流程可能是一个好方法。但是,在我同事的机器上,重启服务太快了,我无法停止它并单击Debug->Attach to Process->select_exe,老实说,它根本没有在OnStart函数处停止,这很奇怪。 ..

WCF 作为 Windows 服务托管。

有人可以根据您的经验和知识给我任何想法或提示吗?或者您认为适合我的情况的任何其他方法。

任何想法都值得赞赏。万分感谢。 =)

【问题讨论】:

  • 如果这是您控制的服务,只需在它的开头放入一个 Debugger.Launch() 以附加到它
  • @Abhinav 我在 OnStart 函数处设置了一个断点,我尝试重新启动服务以便服务停止然后启动,它不会在 onstart 函数处停止。

标签: c# wcf service message-queue visual-studio-debugging


【解决方案1】:

如何托管此 WCF 服务? Web 服务、Windows 服务、控制台应用程序等?在任何情况下,您都可以在 VS 中调试该应用程序并让您的应用程序命中它。对于 Windows 服务,您将不得不稍微更改代码以进行调试。

【讨论】:

  • 它作为 Windows 服务托管
  • 谢谢。另外,还有一个与测试有关的问题:存根、起订量和痣是否与我的问题有关,我应该花时间为我当前的项目探索它吗?
【解决方案2】:

修改服务代码,使其检测到它正在使用 Environment.UserInteractive Property 从调试器运行,或者只是处于调试模式 (#ifdef DEBUG)(而不是发布),然后将程序作为控制台应用程序而不是而不是服务。

例如:

    static void Main()
    {
#ifdef DEBUG
        Application.Run();
#else
        ServiceBase service = new SampleService(); 
        ServiceBase.Run(service); 
#endif
    }

这将允许您在 Visual Studio 的一个实例中设置断点并单步执行代码,同时在另一个实例中运行客户端代码。

【讨论】:

  • 这就是我所说的变化。这样您就可以摆脱 SCM。
  • @ChrisF♦ 谢谢。另外,还有一个与测试有关的问题:存根、起订量和痣是否与我的问题有关,我应该花时间为我当前的项目探索它吗?
  • @ChrisF♦ 因为我一次只浏览和运行 1 个 xml 文件,这是否意味着我正在进行单元测试并花时间探索那些存根、起订量和痣?
  • @user2751691 请就此提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多