需求注重的是在利用翻开操作后前往了一个 MSMQQueue 对象。上面是一个典范的新建和删除操作例子:
< %
Dim objQueue
Set objQueue = Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName = ".\MyQu"
objQueue.Create
%>
< %
Dim objQueue
Set objQueue = Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName = ".\MyQu"
objQueue.Delete
%>
( 2 )、 MSMQQueue
MSMQQueue 类用来描写一个在 MSMQ 办事中翻开的队列。该类供应了一个用来在指针队列中的动静停止轮回的功效。你不克不及够翻开一个利用了 MSMQQueue 类的队列要这么干只可以利用 MSQMQueueInfo (见上例),固然很多 ASP 应用法式凡是利用 MSMQ 来发动静,然而良多时分也需求 ASP 来显示这个动静的详细内容。
获得动静的体例有两种:同步体例,异步体例,然而 ASP 只可以利用同步体例。这是由于 ASP 不克不及够在办事端声名一个 WithEvents 变量。
上面先举一个异步体例利用 MSMQ 的例子(仅 VB 中)
Option Explicit
Dim m_objQueueInfo As New MSMQQueueInfo
Dim m_objQueue As MSMQQueue
Dim WithEvents m_objMSMQEvent As MSMQEvent
Private Sub Form_Load()
m_objQueueInfo.PathName = ".\MyQu"
m_objQueueInfo.Label = "My Sample Queue"
On Error Resume Next
m_objQueueInfo.Create
On Error GoTo 0
Set m_objQueue = m_objQueueInfo.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)
Set m_objMSMQEvent = New MSMQEvent
m_objQueue.EnableNotification m_objMSMQEvent, MQMSG_CURRENT, 1000
End Sub
Private Sub m_objMSMQEvent_Arrived(ByVal Queue As Object, ByVal Cursor As Long)
Dim m_objMessage As MSMQMessage
Set m_objMessage = Queue.PeekCurrent
MsgBox "Message Received: " & m_objMessage.Label
m_objQueue.EnableNotification m_objMSMQEvent, MQMSG_NEXT, 10000
End Sub
Private Sub m_objMSMQEvent_ArrivedError(ByVal Queue As Object, ByVal ErrorCode As Long, ByVal Cursor As Long)
MsgBox "Error accorded: " & ErrorCode
End Sub
这段代码起首创立一个队列(假如它还不存在的话)。然后 m_objMSMQEvent 对象经由过程挪用 EnableNotification 毗连到 MSMQQueue 对象。一旦毗连到 MSMQEvent 对象 , 接上去需做的仅仅是完成 Arrived 和 Arrived_Error ( 可选的 ) 事务。 Arrived 事务当一个新的动静抵达队列时将被触发该事务前往两个指针 , 一个是指向队列中应当历来入手下手读动静的地位,别的一个是以后的地位。假如产生毛病,将触发 ArrivedError 事务当同步获得动静时,会一向比及动静可获得或则超不时法式才会不被挂起。代码以下:
Public Sub DisplayMessages()
Dim objQueueInfo As New MSMQQueueInfo
Dim objQueue As MSMQQueue
Dim objMessage As MSMQMessage
objQueueInfo.PathName = ".\MyQu"
objQueueInfo.Label = "My Sample Queue"
On Error Resume Next
objQueueInfo.Create
On Error GoTo 0
Set objQueue = objQueueInfo.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)
Do While True
Set objMessage = objQueue.Peek(, , 1000)
If objMessage Is Nothing Then Exit Do
MsgBox "Message: " & objMessage.Label
Loop
MsgBox "No more new messages."
objQueue.Close
Set objMessage = Nothing
Set objQueue = Nothing
Set objQueueInfo = Nothing
End Sub
( 3 )、 MSMQMessage
MSMQMessage 类撑持队列中动静的一切属性。 MSMQ 动静有两个办法和单一的属性。个中两个最次要的属性是: Body 和 LabeL 。最次要的办法有 Send 。有两种办法来获得动静: opening , peeking 。当利用 opening 体例后,该动静将会被删除失落;当利用 peeking 体例后,该动静依然保留在队列中直到它过时。它们的前往值都是指向该动静的指针。下例的代码将翻开一个动静,并显示其 Body 和 Label
Private Sub LookForMessage()
Dim objQInfo As New MSMQQueueInfo
Dim objQReceive As MSMQQueue
Dim objMessage As MSMQMessage
objQInfo.PathName = ".\test"
Set objQReceive = objQInfo.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)
Set objMessage = objQReceive.Receive(, , , 1000)
If Not objMessage Is Nothing Then
MsgBox objMessage.Label & " - " & objMessage.Body
Else
Msgbox "Nothing in the queue"
End If
objQReceive.Close
Set objQInfo = Nothing
Set objQReceive = Nothing
Set objMessage = Nothing
End Sub
这段代码翻开一个队列并在该队列中查找动静,利用 Receive 办法,次要是设置一个 1000 微秒的超时 , 它告知 MSMQ1000 微秒后中断查找设置一个十分段的超时的功效次要是用来反省是不是存在动静而不是等待一个动静。也就是说假如你常识想看看是不是有动静可使用该办法。假如无动静,前往的指针为空 (If Not objMessage Is Nothing) 。上面是发送一个动静的代码:
< %
Dim objQInfo
Dim objQSend
Dim objMessage
Set objQInfo = Server.CreateObject("MSMQ.MSMQQueueInfo")
objQInfo.PathName = ".\test"
Set objQSend = objQInfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE)
Set objMessage = Server.CreateObject("MSMQ.MSMQMessage")
objMessage.Label = "This is the label."
objMessage.Body = "This is the body."
objMessage.Send objQSend
objQSend.Close
Set objQInfo = Nothing
Set objQSend = Nothing
Set objMessage = Nothing
%>