我有一个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应用程序时,没有收到任何消息。
我的问题非常简单:如何“调试”此服务以查看它的错误以及为什么不处理邮件?无论如何要比较两者吗?
由于
答案 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)
有几个选择:
只需确保您的服务已启动并正在运行(主机不会抛出任何错误),并且您是否已从开发.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保持运行。