如何:查看消息
更新:2007 年 11 月
可以使用 Peek 方法查看任何队列中的第一个消息,但不将该消息从队列中移除。这使组件得以从队列中获取信息,同时不阻碍其他应用程序或组件检索它们打算处理的消息。
说明: |
---|
使用 Peek,可以仅查看队列中的第一个消息。由于查看消息时不会将其从队列中移除,所以无法查看后面的消息。如果要查看队列中的所有消息,但不将消息从队列中移除,可以使用 GetAllMessages 方法或 GetMessageEnumerator 方法。有关更多信息,请参见队列和消息集合。 |
如果调用 Peek 方法时队列中没有消息,该方法将一直等到有消息到达为止。如果希望该方法仅等待一段指定的时间,可指定超时期限。超时期限被指定为 TimeSpan 对象。最常见的情况是,超时期限被设置为零(这种情况下检查消息,根本不等待),或设置为默认的无穷大(这种情况下无限期等待)。通过在代码中使用以下语法进行设置:
msg.TimeToBeReceived = System.Messaging.Message.InfiniteTimeout
msg.TimeToBeReceived = System.Messaging.Message.InfiniteTimeout;
msg.set_TimeToBeReceived(System.Messaging.Message.InfiniteTimeout);
此外,还可以通过设置 TimeToBeReceived 属性在“属性”窗口中对此进行设置。
提示: |
---|
使用非独立客户端时,请确保客户端计算机上的时钟与运行消息队列的服务器上的时钟同步。否则,当发送 TimeToBeReceived 属性不是 InfiniteTimeout 的消息时,可能会导致不可预知的行为。 |
查看可以是同步的,也可以是异步的。有关更多信息,请参见如何:异步接收消息。
同步查看消息
创建 MessageQueue 组件的一个实例,并将其 Path 属性设置为要引用的队列。有关更多信息,请参见如何:创建 MessageQueue 组件实例。
调用 Peek 方法,以获取有关队列中第一个消息的数据。或者,若要为 Peek 方法指定超时,应将需要的方法等待时间(TimeSpan 对象)作为方法的一个参数输入。
例如,下面的代码演示了如何使用 Peek 方法返回并显示有关队列中第一个消息的信息。
Public Sub LookFirstMessage() Dim NewQueue As New System.Messaging.MessageQueue(".\MyQueue") Dim FirstMessage As System.Messaging.Message FirstMessage = NewQueue.Peek Dim targetNames() As String = {"System.String,mscorlib"} FirstMessage.Formatter = _ New System.Messaging.XmlMessageFormatter(targetNames) Dim label As String = CStr(FirstMessage.Label) End Sub
public void LookFirstMessage() { System.Messaging.MessageQueue newQueue = new System.Messaging.MessageQueue(".\\MyQueue"); System.Messaging.Message firstMessage; string[] types = { "System.String,mscorlib" }; firstMessage = newQueue.Peek(); firstMessage.Formatter = new System.Messaging.XmlMessageFormatter(types); string label = firstMessage.Label.ToString(); }