Распределенные приложения на основе MS Message Queue Server


         

В зависимости от значения параметра


В зависимости от значения параметра blnDeleteMsgFromQue мы будем читать с удалением (Receive) или, прочитав, оставлять в очереди (Peek). Последний параметр позволяет прочитать сообщение, не читая тела, сэкономив на этом время в случае последовательного поиска в очереди интересующего нас сообщения, например, по метке, особенно если содержания сообщений достаточно объемны.

Dim q As MSMQQueue
Set q = FindQueOnLabel(strQueLbl).Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)

Второй параметр метода Open позволяет ограничить доступ к открываемой на прием очереди. Если он равен MQ_DENY_RECEIVE_SHARE, то при попытке открыть очередь, уже открытую для чтения другим процессом, генерируется ошибка MQ_ERROR_SHARING_VIOLATION.

If blnDeleteMsgFromQue Then
Set SyncReceiveMQMsg = q.Receive(WantBody:=blnWantBody, ReceiveTimeout:=lngTimeout)
Else
Set SyncReceiveMQMsg = q.Peek(WantBody:=blnWantBody, ReceiveTimeout:=lngTimeout)
End If
q.Close
End Function

Используем эту функцию для приема ранее отправленного объекта Recordset:

Dim msg As MSMQMessage
Set msg = SyncReceiveMQMsg(“InteractionQueue”, 0, True, True)

Просмотрев отладчиком свойства msg.Body, можно убедиться, что они тождественны RDS_DC.Recordset. Конечно, чтобы передать набор записей, мы могли бы использовать массивы, строки, разбить передачу на несколько сообщений и т.д., но передача объекта выглядит более изящно, так как избавляет нас от необходимости дополнительных преобразований при отправке и приеме. Тело принятого сообщения представляет собой готовый объект, который в дальнейшем мы можем использовать непосредственно. Например, присвоить аналогичному свойству объекта RDS:

Dim oRDS_DC1 As New RDS.DataControl
oRDS_DC1.SourceRecordset = msg.Body

или ActiveX Data Objects (ADO) 1.5:

Dim oADORS As ADODB.Recordset
Set oADORS = msg.Body

или населить им какой-нибудь визуальный элемент управления, например Sheridan Databound Control:

<OBJECT ID=”GRID” WIDTH=500 HEIGHT=300 Datasrc=”#oRDS_DC1"
CODEBASE=”http://<%=Request.ServerVariables(“SERVER_NAME”)%>/MSADC/Samples/ssdatb32.cab”

Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий