WCF不接收消息 - 如何调试WCF服务?

时间:2010-01-13 15:56:52

标签: wcf wcf-binding

我有一个WCF主机,可以监听主题并处理传入的消息。代码看起来像这样:

 using (ServiceHost host = new ServiceHost(MessagingServiceType))
 {
               host.Open();
}

,MessagingServiceType如下所示:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
    public class MessagingServiceType : IMessagingService
    {
        /// <summary>
        /// service instance
        /// </summary>
        private readonly MessagingService service;

        /// <summary>
        /// Initializes a new instance of the <see cref="MessagingServiceType"/> class.
        /// </summary>
        public MessagingServiceType()
        {
            // creating new messaging service
            service = new Singleton<MessagingService>();
        }

        /// <summary>
        /// Sends the message.
        /// </summary>
        /// <param name="messageContent">Content of the message.</param>
        public void SendMessage(string messageContent)
        {
            Message msg = Message.CreateMessage(MessageVersion.Default, string.Empty, messageContent);

            service.MessageReceived(msg);
        }
    }

问题在于,当我在单独的测试应用程序上运行它时,一切正常,所有服务都接收所有消息。但是,当我使用完全相同的代码并将其放入我的REAL应用程序时,没有收到任何消息。

我的问题非常简单:如何“调试”此服务以查看它的错误以及为什么不处理邮件?无论如何要比较两者吗?

由于

4 个答案:

答案 0 :(得分:4)

确保您的服务不会收到任何内容....只需查看您的代码:

 using (ServiceHost host = new ServiceHost(MessagingServiceType))
 {
               host.Open();
 }

当你到达“}”时会发生什么? “使用”子句中的对象 - 您的ServiceHost - 将被释放/处置! ==&GT;在你知道之前,你的服务再次消失.....

您需要执行以下操作:

ServiceHost host = new ServiceHost(MessagingServiceType);
host.Open();

Console.ReadLine();  // wait for a ENTER press
host.Close();

不需要大调试........: - )

答案 1 :(得分:1)

有几个选择:

  • 您可以将Visual Studio调试器附加到服务主机
  • 您可以创建一些message inspector来检查收到的消息
  • 您可以使用数据包嗅探器,但这似乎是一种过度杀伤。

只需确保您的服务已启动并正在运行(主机不会抛出任何错误),并且您是否已从开发.config文件中复制了所有相关设置信息。

答案 2 :(得分:1)

Visual Studio提供了附加到远程进程以进行调试的功能。它将要求您在远程计算机上运行Visual Studio远程调试监视器。

从visual studio,您可以转到Debug / Attach To Process。在出现的对话框中,您将看到一个限定符标记,允许您输入远程服务器名称。将其放入后,您可以附加到WCF服务的进程。如果您的服务是通过IIS托管的,则可能需要附加到w3wp.exe进程。

这将允许您在服务方法中的代码中设置断点,并且当远程服务执行这些方法时,将触发断点。重要的是您的代码与远程服务器上的代码完全同步,否则,当您单步执行调试器时,您的行将关闭。

这是一个链接,也有一些提示: http://geekswithblogs.net/TimH/archive/2006/08/08/87355.aspx

答案 3 :(得分:0)

Configuring Tracing and using the Service Trace Viewer通常可以告诉您问题所在。

当然,您需要确保服务器按照marc_s' answer保持运行。